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