Powershell
Powershell 將使用者添加到組
我寫了這段 PS 來將使用者從文本文件添加到使用者輸入的 AD 組。除了
if
語句之外,它工作正常。if 語句應該檢查組以查看文本文件中的使用者是否已經是組成員。因此,$item
變數被初始化為“jdoe”,$member
變數被初始化為:$member=Get-ADGroupMember -identity $group | select SamAccountName
問題成員將使用 、 等進行初始化
@{SamAccountName=JDoe}
。@{SamAccountName=bsmith}
基本上,所有成員都一舉一動,並用附加數據封裝,從而模糊了用於比較的數據。這是我的全部程式碼。我將不勝感激任何幫助。謝謝#User input group name $group=read-host -prompt "Enter group name:" #Loop through each item in text file foreach ($item in Get-Content C:\addusers.txt) { #If user is already a member of group... $member = Get-ADGroupMember -identity $group | select SamAccountName if ($member -eq $item) { Write-Host $item "is already a member of" $group } #add to group Add-ADGroupMember -Identity $group -Member $item }
第一個問題是你的比較。將值分配給 $member 的行返回一個列表,而不是單個項目。因此,您基本上是在測試中詢問“這個大列表是否等於單個項目”。該條件永遠不會成立,除非該組只有一個成員(我不確定在這種情況下您是否會得到一個項目,或者一個具有一個成員的數組對象)。
第二個問題是您對這個測試的結果沒有做任何事情——即使使用者已經在組中,您仍然會執行組添加(假設您的測試編寫正確)。為什麼?
它也有很多成本,因為每次執行它都會執行組內容的轉儲。最好在 foreach 循環之外獲取組成員一次,然後在 foreach 循環內對該列表使用數組搜尋。這不是一個問題,但可能值得修復。
PS–即使使用者已經是組的成員,您也可以將使用者添加到組中。因此,您可能希望完全刪除此比較:
foreach ($user in get-content $userspath) { Add-ADGroupMember -Identity $group -Member $user }
編輯:如果您仍想搜尋組中成員的存在,您可以這樣做:
$u = get-aduser $user -properties "memberof" if ($u.memberOf -contains (get-adgroup $group) ) ...