获取所有本地成员和组一起显示

时间:2014-01-22 16:16:16

标签: powershell csv adsi

到目前为止,我有下面的脚本,它像魅力一样,但只列出组“管理员”的成员。因为我的服务器可能是德语,法语...我不能保证这样的组会与英语单词一起存在。所以我想调整它来收集所有组和相关成员,而不仅仅是管理员...让我感到困惑的是一个特定的步骤

下面的脚本列出了非空本地组中的所有用户。但是,我想在我的CSV中输入用户所属组的名称,以便更清楚地解释。

有人可以帮我这个吗?我有点被困,而且一无所获。

$Servers=Get-Content ListOfComputers.txt 
$output = 'ListOfLocalAdministratorsGroup.csv'
$results = @()

foreach($server in $Servers)
{
$admins = @()
$computer =[ADSI]"WinNT://$server"
$computer.psbase.children | where { $_.psbase.schemaClassName -eq 'group' } | foreach {
$group =[ADSI]$_.psbase.Path
$members = @($group.psbase.Invoke("Members"))
$members | foreach {
 $obj = new-object psobject -Property @{
 Server = $Server
 Admin = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
 }
 $admins += $obj
 }}
$results += $admins
}
$results| Export-csv $Output -NoTypeInformation

2 个答案:

答案 0 :(得分:3)

本地管理员组将始终具有以下sid:S-1-5-32-544(记录在Well-known security identifiers in Windows operating systems.

因此,您可以在脚本中添加以下内容以获取正确的组名:

$objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-544")
$objgroup = $objSID.Translate( [System.Security.Principal.NTAccount])
$objgroupname = ($objgroup.Value).Split("\")[1]

答案 1 :(得分:1)

它就像Trondh的最后编辑一样魅力。

这是代码的最后一个版本。因此,它将收集本地Administrators组的所有成员(与用于命名它的语言无关)

非常感谢:) !!

#The Third section will query each computer in the ListOfComputers.txt to get the members of the local group Administrators
$Servers=Get-Content ListOfComputers.txt 
$output = 'ListOfLocalAdministratorsGroup.csv'
$results = @()

$objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-544")
$objgroup = $objSID.Translate( [System.Security.Principal.NTAccount])
$objgroupname = ($objgroup.Value).Split("\")[1]

foreach($server in $Servers)
{
$admins = @()
$group =[ADSI]"WinNT://$server/$objgroupname" 
$members = @($group.psbase.Invoke("Members"))
$members | foreach {
 $obj = new-object psobject -Property @{
 Server = $Server
 Admin = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
 }
 $admins += $obj
 } 
$results += $admins
}
$results| Export-csv $Output -NoTypeInformation