Solved

Powershell - How to pull all Local Accounts from multiple machines

Posted on 2013-11-22
6
803 Views
Last Modified: 2013-11-25
Hi EE

I have the script below that Subsun helped me with . It was originally set to pull the member of the Administrators group but I was trying to modify it to pull all Local Accounts and its pulling members of the local Users group only not all Local Accounts .

Any ideas ?  I dont have to use this scrtipt if someone already has something different.

function get-localusers {
        param(
    [Parameter(Mandatory=$true,valuefrompipeline=$true)]
    [string]$strComputer)
    begin {}
    Process {
      $Select = "Name","Class" | %{  
        Invoke-Expression "@{n='$_';e={ `$_.GetType().InvokeMember('$_', 'GetProperty', `$Null, `$_, `$Null) }}"  
      }
      If (Test-Connection $strComputer -Count 2 -Quiet){
        $Users =""
        $computer = [ADSI]("WinNT://" + $strComputer + ",computer")
        $UsersGroup = $computer.psbase.children.find("Users")
        $Usermembers= $UsersGroup.psbase.invoke("Members") | Select $Select
              foreach ($Users in $Usermembers) {
              $Users | Select @{N="ComputerName";E={$strComputer}},@{N="Users";E={$_.Name}},Class
                  }
            }
      Else {
            "" | Select @{N="ComputerName";E={$strComputer}},@{N="Users";E={"Not able to Ping"}},Class
        }
     }
end {}
}
Get-Content "e:\Projects\servers\Servers.txt" | get-localusers | Select ComputerName,Users,Class | Export-Csv "e:\Projects\Servers\LocalTest_$((get-date).toString('MM-dd-yyyy')).csv" -NTI
0
Comment
Question by:MilesLogan
  • 3
  • 3
6 Comments
 
LVL 40

Expert Comment

by:Subsun
ID: 39669734
If you need only users in report then try..
function get-localusers {
    param(
    [Parameter(Mandatory=$true,valuefrompipeline=$true)]
    [string]$strComputer)
    begin {}
    Process {
      If (Test-Connection $strComputer -Count 2 -Quiet){
	$Users = Get-WmiObject Win32_UserAccount -ComputerName $strComputer
        foreach ($User in $Users) {
         $User | Select @{N="ComputerName";E={$strComputer}},@{N="User";E={$_.Name}}
         }
        }
      Else {
            "" | Select @{N="ComputerName";E={$strComputer}},@{N="User";E={"Not able to Ping"}}
        }
     }
end {}
}
Get-Content "e:\Projects\servers\Servers.txt" | get-localusers | Select ComputerName,User | Export-Csv "e:\Projects\Servers\LocalTest_$((get-date).toString('MM-dd-yyyy')).csv" -NTI 

Open in new window

0
 
LVL 2

Author Comment

by:MilesLogan
ID: 39670752
Hi Subsun , I don't get an error but it just loops and it does not output any data .
0
 
LVL 40

Expert Comment

by:Subsun
ID: 39672067
I just tested the code and I am getting the following result..

"ComputerName","User"
"ServerA","Not able to Ping"
"ServerB","Not able to Ping"
"TestSRV","Administrator"
"TestSRV","Guest"
"TestSRV","TestUser"

Open in new window


Are you getting the user details when you run the following command?

Get-WmiObject Win32_UserAccount -ComputerName ServerA

Open in new window

0
NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

 
LVL 2

Author Comment

by:MilesLogan
ID: 39672246
Below will pull Local Users from an XP machine but if I want the local users from Server 2003/2008 it does not .. same with the full script

Get-WmiObject Win32_UserAccount -ComputerName ServerA
0
 
LVL 40

Accepted Solution

by:
Subsun earned 500 total points
ID: 39672645
Ok I didn't test it.. Try this..
function get-localusers {
    param(
    [Parameter(Mandatory=$true,valuefrompipeline=$true)]
    [string]$strComputer)
    begin {}
    Process {
      $Select = "Name","Class" | %{  
      Invoke-Expression "@{n='$_';e={ `$_.GetType().InvokeMember('$_', 'GetProperty', `$Null, `$_, `$Null) }}"  
       }
        If (Test-Connection $strComputer -Count 2 -Quiet){
         $computer = [ADSI]("WinNT://" + $strComputer + ",computer")
         $Users = $computer.psbase.children | ? {$_.psbase.SchemaClassName -eq "User"}
	 foreach ($User in $Users) {
	  $User | Select @{N="ComputerName";E={$strComputer}},@{N="User";E={$_.Name}},Class
	 }
        }
      Else {
          "" | Select @{N="ComputerName";E={$strComputer}},@{N="User";E={"Not able to Ping"}},Class
        }
      }
end {}
}
Get-Content "e:\Projects\servers\Servers.txt" | get-localusers | Select ComputerName,User | Export-Csv "e:\Projects\Servers\LocalTest_$((get-date).toString('MM-dd-yyyy')).csv" -NTI

Open in new window

0
 
LVL 2

Author Closing Comment

by:MilesLogan
ID: 39676563
WOW Subsun !  you always help out so much ! thanks !
I am opening a new question to modify this same script if it can show if the user is Disabled/Enabled and possibly the Full Name and Description .
0

Featured Post

Are your AD admin tools letting you down?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article explains how to prepare an HTML email signature template file containing dynamic placeholders for users' Azure AD data. Furthermore, it explains how to use this file to remotely set up a department-wide email signature policy in Office …
While rebooting windows server 2003 server , it's showing "active directory rebuilding indices please wait" at startup. It took a little while for this process to complete and once we logged on not all the services were started so another reboot is …
This tutorial will give a short introduction and overview of Backup Exec 2012 and how to navigate and perform basic functions. Click on the Backup Exec button in the upper left corner. From here, are global settings for the application such as conne…
This tutorial will walk an individual through locating and launching the BEUtility application to properly change the service account username and\or password in situation where it may be necessary or where the password has been inadvertently change…

806 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question