2016-10-24 7 views
0

以下のコードを作成しましたが、それが動作していない人はわかりません。私はこれを手動で行う場合は動作しますが、問題と思われるのは、変数がfor-eachオブジェクトを配列として使用せず、一度に1つのコンピュータ名の代わりに変数の内容全体が使用されていることです。powershellを使用して配布グループにコンピュータを追加する方法

ご協力いただければ幸いです。

import-module activedirectory 
$virtuals = get-adcomputer -filter "Name -like '*v'" | foreach-object{$_.distinguishedname} 
foreach-object -inputobject $virtuals { 
    Add-ADGroupMember VMs "$_" 
} 

私が手にエラーがある:

何が起こっているかである
Add-ADGroupMember : Cannot find an object with identity: 'CN=CSD-024V,OU=VM,OU=Workstations,OU=... 
' under: 'DC=co,DC=****,DC=wi,DC=us'. 
At line:4 char:22 
+  Add-ADGroupMember <<<< VMs "$_" 
    + CategoryInfo   : ObjectNotFound: (CN=CSD-024V,OU=...ark,DC=wi,DC=us:ADPrincipal) [Add-ADGroupMember], ADIdentityNotFoundException 
    + FullyQualifiedErrorId : SetADGroupMember.ValidateMembersParameter,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember 

答えて

2

。考えてみましょう:

PS D:\> $nums = 1..5 

PS D:\> $nums | ForEach-Object { "* $_ *" } 
* 1 * 
* 2 * 
* 3 * 
* 4 * 
* 5 * 

PS D:\> ForEach-Object -InputObject $nums { "* $_ *" } 
* 1 2 3 4 5 * 

私はその区別が存在する理由がわからないが、それがヘルプに記載され、here

あなたはをForEach-ObjectにしてInputObjectパラメーターを使用する場合は、代わりに 配管コマンド結果をForEach-Objectに渡すと、InputObject値は であり、単一のオブジェクトとして扱われます。これは、-InputObject (Get-Process)などのコマンドの結果である値が であっても当てはまります。

だからあなたの修正は次のようになります。私のコードブロック(使用可能な場合)から

$virtuals | ForEach-Object { 
    Add-ADGroupMember VMs "$_" 
} 

自動生成されたPSのヘルプリンク:

+0

ありがとうございました! –

関連する問題