2014-11-03 18 views
2

我正在使用PowerShell腳本將大量用戶導入到AD中。Add-ADGroupMember找不到具有標識的對象

其中一項是根據用戶的程序編號將用戶添加到AD安全組中。大多數情況下,這是行之有效的,除非我拼錯了某些東西或其他簡單的人爲錯誤。但是,我們有兩個安全組必須添加到每個安全組,而Add-ADGroupMember完美適用於其中一個,它無法找到另一個組。這是我使用的腳本:

$Users = Import-Csv "C:\PSScripts\Create\users.csv" 
foreach ($User in $Users) 
{ 
    $AccountName = $User.firstname + "." + $User.lastname 
    $Program = $User.Program 
    $HomeDrive = 'H:' 
    $UserRoot = '\\twgeneral\homedrive\' 
    $HomeDirectory = $UserRoot+$AccountName 
    Set-ADUser $AccountName -HomeDrive $HomeDrive -HomeDirectory $HomeDirectory 
    If ($AccountName -eq $AccountName) 
    { 
     Add-ADGroupMember -Identity "ALL_USERS" -Member $Accountname 
    } 
    If ($AccountName -eq $AccountName) 
    { 
     Add-ADGroupMember -Identity "000-All users" -Member $Accountname 
    } 
} 

而且我得到這個錯誤返回:

Add-ADGroupMember : Cannot find an object with identity: '000-All users' under:  'DC=*****,CD=local'. 
At C:\psscripts\create\Groups.ps1:15 char:23 
+  {ADD-ADGroupMember <<<< -Identity "000-All users" -Member $Accountname 
    + CategoryInfo   : ObjectNotFound: <000-All users:ADGroup> [Add-ADGroupMember], ADIdentityNotFoundException 
    + FullyQualifiedErrorId : Cannot find an object with identity: '000-All users' under: 'DC=*****,DC=local'.,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember 

然而,我可以使用ADUC圖形界面將用戶添加到000-所有用戶組。

同樣,我在這之前運行腳本,用SAM創建用戶;顯示名稱; EXCH。電子郵件帳戶;密碼;和特定的OU,並且它沒有錯誤地執行,我可以進入圖形界面並且看到用戶在哪裏應該配置所有相關的細節,但是一些用戶返回相同的'沒有找到的對象'當我嘗試執行可以工作的組腳本的一部分時出錯,ALL_USERS組。具體來說,它是用戶姓氏連字符,例如:Markiem-Chalmers或Tatem-Brown。

我知道Add-ADGroupMember的語法是正確的,因爲我從前面的字符串中複製並粘貼了該字符串,該字符串正確執行,只將該組的名稱從ALL_USERS更改爲000-所有用戶,並且我已經雙倍,三重,四重檢查拼寫是否正確。任何幫助將不勝感激!

+0

您可以驗證「000-所有用戶」是有問題的組的SAMAccountName嗎?你有沒有嘗試過使用組的DN? – Kohlbrr 2014-11-03 17:13:14

+0

哦,男孩,我現在覺得有點愚蠢。將組名改爲win2k之前,馬上處理。與連字符的姓氏用戶一樣,它截斷姓氏,並截斷字符。這導致了另一個問題 - 我無法進入並更改超過50人的姓氏,以便它正確執行腳本。我如何修改腳本來提取csv中列出的全名,而不是截斷的win2k版本?我認爲通過指定'$ accountname'作爲用戶的名和姓在csv的相應列中指定? – Hekmari 2014-11-03 17:43:28

回答

1

在回答您的意見提出了這樣一個問題:

Add-ADGroupMember只能通過DN,SAM,GUID或SID搜索;您無法直接通過該cmdlet按名稱或其他屬性進行搜索。

可以運行在CSV的條目Get-ADUser拉SAM使用名稱或其他方式,但如果問題是SAM被截斷,爲什麼不串?

$limit = #The length a name can be before it gets truncated 
if($AccountName.Length -gt $limit) 
{ 
    $AccountName = $AccountName.Substring(0,$limit) 
} 
+0

字符限制是20個字符,所以我會寫它$ Limit = 20或者我會寫它$ Limit =#20? – Hekmari 2014-11-03 18:12:49

+0

'$ limit = 20'。 '#'是註釋符號 - 我只是用它來解釋'$ limit'。 – Kohlbrr 2014-11-03 18:19:06

+0

它仍然告訴我它找不到對象,所以我必須利用子字符串錯誤?我以前從未使用過,對於PowerShell還是很新的。 – Hekmari 2014-11-03 18:47:53