Powershell

Powershell 將使用者添加到組

  • August 14, 2013

我寫了這段 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) ) 
   ...

引用自:https://serverfault.com/questions/531001