2014-01-22 56 views
1

到目前爲止,我有下面的腳本,它像一個魅力一樣工作,但只列出組「管理員」的成員。由於我的服務器可能是德語,法語......我不能保證這樣的小組會與英文單詞一起存在。所以我想修改它收集所有組和相關成員,而不是隻有管理員......無賴我上的一個具體步驟獲取所有本地成員和組一起顯示

下面列表中的腳本,在非空的本地組的所有用戶stucked。不過,我希望在我的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 

回答

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] 
+0

你好Trondh, 對不起,我在此期間,編輯,因爲我修改了劇本,並幾乎得到它的工作。 我會嘗試你的解決方案,讓你知道! :) – Wawa41

+0

Trondh,我試過你的答案,但我得到「組名無法找到」與Invoke方法的錯誤。 – Wawa41

+0

這種方式: $ objSID = New-Object System.Security.Principal.SecurityIdentifier(「S-1-5-32-544」) $ objgroup = $ objSID.Translate([System.Security.Principal.NTAccount] ) $ objgroupname = $ objgroup.Value 的foreach(在$ $服務器服務器) { $管理員= @() $組= [ADSI] 「WINNT:// $服務器/ $ objgroupname」 $成員= @($ group.psbase.Invoke(「Members」)) – Wawa41

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 
+0

大家好,我的域名上的語言有同樣的問題,但是這個腳本的複製/粘貼給了我一個Invoke的錯誤:使用「2」參數調用「Invoke」的異常:「組名不能被發現。」 $ objgroupname具有管理員和管理員組。我有一個服務器陣列中的計算機列表..我錯過了什麼? – Edwardo