Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I need to generate a report that shows the guest account is disabled for a given list of computers.

How can I use net user, powershell, or any other commonly used tool for this purpose?

share|improve this question
up vote 2 down vote accepted

Here's a little PowerShell function to check for this.

function Test-LocalAccountDisabled
    param (
        $AccountName = 'Guest',
        $ComputerName = $env:COMPUTERNAME

    foreach ($Computer in $ComputerName)
        if ($Guest -ne $null)
            New-Object PSObject -Property @{
                Disabled = ($Guest.UserFlags.Value -band $AccountDisable) -as [boolean]
                AccountName = $AccountName
                ComputerName = $Computer
            Write-Error "Unable to find $AccountName on $Computer."

If you have a list of computers in a text file separated by line breaks, you could do something like

Test-LocalAccountDisabled -ComputerName (get-content computers.txt)
share|improve this answer
I like this one but it doesn't display output on my PC – LamonteCristo Sep 20 '12 at 16:23
What version of PowerShell are you using? V1, V2, or V3? – Steven Murawski Sep 20 '12 at 16:32
2.0 on Win7 via function Ver { get-host | select version } – LamonteCristo Sep 20 '12 at 16:36
Interesting. I do get output objects on my Win 7 test machine. How are you trying to call the function? – Steven Murawski Sep 20 '12 at 16:41
hmm this works: Get-WmiObject -Class Win32_UserAccount -Computer hostname -Filter "LocalAccount='$true'"|Select-Object Name,Disabled|Format-Table -AutoSize .. do you know how I can have 2 filter statements? && doesn't work. I'd like to add the "name" parameter? – LamonteCristo Sep 20 '12 at 16:48

PowerShell is probably the easiest way:

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

Using wmic in batch is ugly, but will work as well:

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
share|improve this answer
Nice solution. I suggested a couple of edits (adding __Server to know what machine the account status was coming from in the case of checking multiples and using the pipe as the line continuation rather than the backtick. – Steven Murawski Sep 19 '12 at 21:29
@StevenMurawski Thanks. I'm aware that a pipe at the end of the line would automatically continue the line, but I prefer to escape the line break and put the pipe at the beginning of the next line. That way I can see immediately where a command is continued from the previous line. I didn't know about __Server, though. Thanks for the tip, that's much more convenient than @{n=computer;e={$computer}}. – Ansgar Wiechers Sep 19 '12 at 21:46
You bet. The backtick at the end of the line can sometimes throw people off, so that's why I recommended that change. No worries. Rather than using the foreach, you could just pass the whole (Get-Content computers.txt) to the -computername parameter. That would let all the queries go at once rather than queuing them up in a line. If you have a number of machines, that will perform better. – Steven Murawski Sep 19 '12 at 21:52
This doesn't work for me. When I manually type Get-WmiObject Win32_UserAccount -Computer nycexhc01 -Filter "Name = 'guest'" | fl there is no "disabled" property, and I also get the local machine and domain guest account for each query. – LamonteCristo Sep 20 '12 at 16:26

A Powershell script with something like this should do the trick:

$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

This will read in a list of server names from a text file, and loop through them displaying an entry for each disabled guest account. If you take out AND Name=Guest, it will show you all disabled accounts on each machine.

share|improve this answer
Steve, rather than using the foreach, you can pass all the computer names to the -computername parameter. You could add __Server to the output so that the user knows which machine the account report is coming from. – Steven Murawski Sep 19 '12 at 21:33
Ahh.. yes. You are correct! – Steve G Sep 19 '12 at 21:36
I don't have a disabled property for any server I query. – LamonteCristo Sep 20 '12 at 16:27

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.