Usando a linha de comando para ver se a conta de convidado local de um determinado computador está desabilitada

1

Eu preciso gerar um relatório que mostre que a conta do convidado está desativada para uma determinada lista de computadores.

Como posso usar o net user , o powershell ou qualquer outra ferramenta comumente usada para esse fim?

    
por random65537 19.09.2012 / 22:51

3 respostas

2

Aqui está uma pequena função do PowerShell para verificar isso.

function Test-LocalAccountDisabled
{
    param (
        [string]
        $AccountName = 'Guest',
        [string[]]
        $ComputerName = $env:COMPUTERNAME
    )

    $AccountDisable=0x0002
    foreach ($Computer in $ComputerName)
    {
        [ADSI]$Guest="WinNT://$Computer/$AccountName,User"
        if ($Guest -ne $null)
        {
            New-Object PSObject -Property @{
                Disabled = ($Guest.UserFlags.Value -band $AccountDisable) -as [boolean]
                AccountName = $AccountName
                ComputerName = $Computer
            }
        }
        else
        {
            Write-Error "Unable to find $AccountName on $Computer."
        }
    }
}

Se você tiver uma lista de computadores em um arquivo de texto separados por quebras de linha, poderá fazer algo como

Test-LocalAccountDisabled -ComputerName (get-content computers.txt)
    
por 19.09.2012 / 23:23
1

O PowerShell é provavelmente a maneira mais fácil:

foreach ( $computer in (Get-Content computers.txt) ) {
  Get-WmiObject Win32_UserAccount -Computer $computer -Filter "Name = 'guest'" '
    | Select-Object __Server, Disabled
}

Usar wmic no lote é feio, mas funciona também:

set query=useraccount where name^^="guest" get disabled

for /f %c in ('computers.txt') do (
  for /f "delims== tokens=2" %a in ('wmic /node:%c %query% /value') do (
    echo %c %a
  )
)
    
por 19.09.2012 / 23:21
0

Um script do Powershell com algo como isso deve funcionar:

$Servers = Get-Content "C:\Path\To\File\With\Servers.txt"

foreach ($Server in $Servers)
{
    Get-WmiObject Win32_UserAccount -computername $Server -filter "LocalAccount=True AND' 
    Name='Guest'" | Select-Object Domain,Name,Disabled
}

Isso lerá em uma lista de nomes de servidores de um arquivo de texto e passará por eles exibindo uma entrada para cada conta de convidado desativada. Se você retirar AND Name=Guest , ele mostrará todas as contas desativadas em cada máquina.

    
por 19.09.2012 / 23:26