Usuário com melhor resposta
Como exportar os usuarios membros de grupos locais usando Power Shell com Delimitadores

Pergunta
-
Ola Pessoal, gostaria de ajuda com o seguinte script Power Shell encontrado no internet e modificado por mim...
$Result = @()
foreach($server in (gc C:\temp\ListaServidores.txt)){
$computer = [ADSI](”WinNT://” + $server + “,computer”)
$Group = $computer.psbase.children.find(”Administrators”)
$Group1 = $computer.psbase.children.find(”Power Users”)
$Group2 = $computer.psbase.children.find(”Remote Desktop Users”)
function getAdmins
{$members = ($Group.psbase.invoke(”Members”) | %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '')
$members}
function getPower
{$members = ($Group1.psbase.invoke(”Members”) | %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '')
$members}
function getRemoteDesk
{$members = ($Group2.psbase.invoke(”Members”) | %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '')
$members}
$Result += Write-Output '***************************************************************************'
$Result += Write-Output "SERVER: $server"
$Result += Write-Output ' '
$Result += Write-Output 'Membro de Administrators'
$Result += ( getAdmins )
$Result += Write-Output ' '
$Result += Write-Output 'Membro de Power Users'
$Result += ( getPower )
$Result += Write-Output ' '
$Result += Write-Output 'Membro de Remote Desktop Users'
$Result += ( getRemoteDesk )
$Result += Write-Output ' '
}
$Result > C:\temp\Resultado.txt
Através deste script, obtenho uma lista de todos os usuários membros dos grupos Administradores, Power Users e Remote Desktop Users, ele lê os serves da listaservidores.txt e grava no arquivo Resultado.txt conforme exemplo abaixo:
***************************************************************************
SERVER: VM-TESTE
Membro de Administrators
DOMINIO/VM-TESTE/Administrator
DOMINIO/Domain Admins
DOMINIO/Administrator
Membro de Power Users
DOMINIO/Usuario
Membro de Remote Desktop Users
DOMINIO/Domain Admins
O que acontece é que não estou conseguindo configurar o script para gravar em CSV com delimitadores e abrir com o Excel. Gostaria que as informações coletadas ficassem no arquivo da seguinte maneira como no exemplo abaixo:
SERVER, GRUPO, USUARIOS
VM-TESTE, Membro de Administrators, DOMINIO/VM-TESTE/Administrator, DOMINIO/Domain Admins, DOMINIO/Administrator,
VM-TESTE, Membro de Power Users, DOMINIO/Usuario,
VM-TESTE, Membro de Remote Desktop Users, DOMINIO/VM-TESTE/Administrator, DOMINIO/Domain Admins, DOMINIO/Administrator,
VM-AJUDA, Membro de Administrators, DOMINIO/VM-TESTE/Administrator, DOMINIO/Domain Admins, DOMINIO/Administrator,
VM-AJUDA, Membro de Power Users, DOMINIO/Usuario, DOMINIO/Usuario2, DOMINIO/Usuario2,
VM-AJUDA, Membro de Remote Desktop Users, DOMINIO/VM-TESTE/Administrator, DOMINIO/Domain Admins, DOMINIO/Administrator,
Será que deu para entender a lógica, desta forma posso importar para o Excel utilizando a “,” como delimitador ficando desta forma o layout abaixo:
SERVER
GRUPO
USUARIOS
VM-TESTE
Membro de Administrators
DOMINIO/VM-TESTE/Administrator
DOMINIO/Domain Admins
DOMINIO/Administrator
VM-TESTE
Membro de Power Users
DOMINIO/Usuario
VM-TESTE
Membro de Remote Desktop Users
DOMINIO/VM-TESTE/Administrator
DOMINIO/Domain Admins
DOMINIO/Administrator
VM-AJUDA
Membro de Administrators
DOMINIO/VM-TESTE/Administrator
DOMINIO/Domain Admins
DOMINIO/Administrator
VM-AJUDA
Membro de Power Users
DOMINIO/Usuario
DOMINIO/Usuario2
DOMINIO/Usuario2
VM-AJUDA
Membro de Remote Desktop Users
DOMINIO/VM-TESTE/Administrator
DOMINIO/Domain Admins
DOMINIO/Administrator
Será que alguém pode me auxiliar nesta dúvida, caso tenham alguma outra alternativa ou ideia também é válida.
Desde já agradeço a atenção..
Jeferson
Respostas
-
Jefeson,
Apenas altere a parte de output como no script a seguir:
$Result = @() foreach($server in (gc C:\temp\ListaServidores.txt)){ $computer = [ADSI](”WinNT://” + $server + “,computer”) $Group = $computer.psbase.children.find(”Administradores”) $Group1 = $computer.psbase.children.find(”Power Users”) $Group2 = $computer.psbase.children.find(”Remote Desktop Users”) function getAdmins { $members = ($Group.psbase.invoke(”Members”) | %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '') $members } function getPower { $members = ($Group1.psbase.invoke(”Members”) | %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '') $members } function getRemoteDesk { $members = ($Group2.psbase.invoke(”Members”) | %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '') $members } $Result += "SERVER;GRUPO;USUARIO" $Result += "$Server;Administrators;"+[string]::join(";",(getAdmins)) $Result += "$Server;Power Users;"+[string]::join(";",(getPower)) $Result += "$Server;Remote Desktop Users;"+[string]::join(";",(getRemoteDesk)) } $Result > C:\temp\Resultado.txt
---------------------------
---------------------------
Fábio de Paula Junior
- Marcado como Resposta Fábio JrModerator quarta-feira, 28 de novembro de 2012 11:03