2016-05-08 13 views
1

私は今、Add-ADGroupmemberを使って数時間CSVからグループにユーザーを追加しようとしています。私はいつもエラーが表示されます。powershellのadd-adgroupmemberの賢明な終わりに

Add-ADGroupMember:パラメータ 'Identity'で引数を検証できません。引数はnullです。引数に有効な値を指定して、再度コマンドを実行してみてください「ここで

は、私が使用しているスクリプトです - 。

import-module ActiveDirectory 
import-csv y:\d1.csv -Delimiter ";" | Foreach-Object {add-adgroupmember -Identity $_.group -Members $_.name}  
group;name 
"CN=example,OU=example,DC=example,DC=example,DC=example";"CN=example,OU=example,OU=example,DC=example,DC=example,DC=example" 
"CN=example-AE,OU=example,DC=example,DC=example,DC=example";"CN=example,OU=example,OU=example,DC=example,DC=example,DC=example" 

は、私は2000人のユーザーまでを持っています約100のグループに追加してください、もっと良い方法があるかもしれませんか?ここに欠けているものがありますか?

+0

まだ喜んでいない、そこにtxtファイルに出力する方法はありますか? – MattMack

+0

実際のコマンドレットを使用する代わりに、これらのタイプの問題のトラブルシューティング(ファイルの読み取りと現在のオブジェクトの操作)を行うには、 'Write-Host'を試して、データが正しいかどうかを確認してください。そこから出力をコピーしてテストし、それが機能するのであればコマンドを完全に実行するように設定する必要があります。 – user4317867

+0

文字列を画面に書き込むための書き込みホストではないので、現在のコマンドを出力できますか? – MattMack

答えて

0

CSVでセミコロンを使用している場合;はデリミタとして、あなたはImport-Csvにそれを伝える必要があります:

import-csv y:\d1.csv -Delimiter ';' 
+0

私はお詫びします、私はスクリプトの最新バージョンでそれを持っていますが、何らかの理由でここにコピーしませんでした。識別名にはカンマがたくさんあるので、区切り文字を安全に変更する必要があると私は考えました。今OPにそれを編集しました。 – MattMack

+0

そして私はCSVを変数に読んでいました。 '$ csv = import-csv Y:\ d1.csv -delim ';' 'そして、' $ csv.group'と '$ csv.name'を使うことができます。 – user4317867

+0

私は上記の歓声に変更します – MattMack

1

は、私はいくつかのトラブルシューティング を行いますこれはあなたのコードのロングバージョンです。 get-adgroupとget-aduserを取得しようとすると、それが有効になる前に有効になるでしょう。

import-module ActiveDirectory 
$csv = import-csv y:\d1.csv -Delimiter ";" 
Foreach-Object ($c in $csv) { 
get-adgroup $c.group 
get-aduser $c.name 

get-adgroup $c.group | add-adgroupmember Members $c.name 
} 

あなたも、時々このような問題は、予期しないデータ(またはその欠如)入力データファイル内で引き起こされるこの

import-module ActiveDirectory 
$csv = import-csv y:\d1.csv -Delimiter ";" 
$c = $csv[0] 
get-adgroup $c.group 
get-aduser $c.name 
get-adgroup $c.group | add-adgroupmember Members $c.name 
+0

最初のスクリプトでは、「\\ zeus \ Shares \ Scripts \ Dashboardcsv \ mylittlecutelittle.ps1:3 char:20 + Foreach-Object($ csvで$ csv ){ + ~~ \\ zeus \ Shares \ Scripts \ Dashboardcsv \ mylittlecutelittle.ps1:3 char:19 + Foreach-Object($ csv){ +〜 \\ zeus \ Shares \ Scripts \ Dashboardcsv \ mylittlecutelittle.ps1:3 char:28 + Foreach-Object($ csv内の$ c) "不正な書式設定で申し訳ありません – MattMack

+0

2番目のスクリプトでエラーが発生する - "Get-ADGroup:パラメータ 'Identity'の引数を検証できません。 。引き数がヌルであるか、引き数コレクションの要素にヌル値が含まれています。 \\ zeus \ Shares \ Scripts \ Dashboardcsv \ mylittlecutelittle.ps1:4 char:13 + get-adgroup $ c.group "これはCSVから何も得られていないことを確かに示しています – MattMack

+0

最初の行に 'あなたは少なくとも$ csv = import-csv。\ blah.csv -delimiter ";"を実行できなければなりません。もし問題があれば、問題があります。あなたが使用しているpowershellのバージョン?試してみてください、$ psversiontable – CaMeL

2

を行うことによって、最初の行にこれを制限しようとすることができます。 Get-Contentより多くの問題がありましたが、Import-Csvよりも...

空白のデータをCSVから渡さないようにしてください(例:ファイルの下部にある空白行など)。あなたは唯一の有効なデータがForeach-Objectループになっていることを確認するためにWhere-Objectチェックをインポート、CSVコマンドレットからの出力をパイプしてみてください:

Import-Csv y:\d1.csv -Delimiter ";" | 
    Where-Object{-not [String]::IsNullOrEmpty($_.group)} | 
    Foreach-Object {Add-ADGroupMember -Identity $_.group -Members $_.name} 

明らかにあなたもNameプロパティで同様のチェックを実行することができます。

+1

'[string] :: IsNullOrWhiteSpace()'は望ましいかもしれませんが、それは重要ではありません。 –