1. ホーム
  2. powershell

[解決済み] Add-ADGroupMember が ID を持つオブジェクトを見つけられません。

2022-02-12 04:36:19

質問

大量のユーザーをADにインポートするためのPowerShellスクリプトを作成しています。

項目の1つは、プログラム番号に従ってユーザーをADセキュリティグループに追加することです。私が何かスペルを間違えたり、その他の単純なヒューマンエラーを起こさない限り、ほとんどの場合、これはうまくいっています。しかし、全員が追加されなければならないセキュリティグループが2つあり、そのうちの1つは 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-Allユーザー・グループにユーザーを追加することができます。

同様に、これより前のスクリプトを実行して、SAM; 表示名; Exch. しかし、グループスクリプトが動作する部分、ALL_USERSグループを実行しようとすると、一部のユーザーは同じ「オブジェクトが見つかりません」エラーを返します。具体的には、Markiem-ChalmersやTatem-Brownのようなハイフンを含んだ姓を持つユーザーです。

の構文がおかしいのは知っています。 Add-ADGroupMember グループ名をALL_USERSから000-All usersに変更しただけで、正しく実行されます。また、スペルが正しいことを二重、三重、四重にチェックしました。どんなヘルプでも大いに結構です!

どのように解決するのですか?

コメントで出していただいた質問に対する回答です。

Add-ADGroupMember は、DN、SAM、GUID、または Sid でのみ検索できます。このコマンドレットを直接使用して、Name やその他のプロパティで検索することはできません。

あなたは 可能 を実行します。 Get-ADUser をCSVのエントリに追加して、Nameなどを使ってSAMを引き出しますが、SAMが切り捨てられることが問題なら、なぜsubstringではないのでしょうか?

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