2017-01-26 22 views
0

私は、csvファイルをインポートし、ADスキーマに組み込まれた一連のカスタム属性を更新するスクリプトを作成しようとしています。私は基本的なコマンドを記述する場合、それは動作します以下のようにではなく、配列で、何らかの理由でPowershellでカスタム属性を更新する

Set-ADComputer : Cannot bind parameter 'Replace' to the target. Exception setting "Replace": "Object reference not set to an instance of an object." At C:\Users\nwatson\Documents\Update Computers.ps1:7 char:24

  • Set-ADComputer -replace <<<< @{bSBPrimaryUser = $user.bSBPrimaryUser}}

    • CategoryInfo : WriteError: (:) [Set-ADComputer], ParameterBindingException

    • FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.ActiveDirectory.Management.Commands.SetADComputer

Import-Module ActiveDirectory 

$USERS = Import-Csv c:\temp\test2.csv 

foreach ($user in $users) { 
    Get-ADComputer -filter {dnsname -eq $user.ComputerName} | 
    Set-ADComputer -replace @{bSBPrimaryUser = $user.bSBPrimaryUser} 
} 

はここに私のエラーメッセージです:

は、ここで基本的なコードです。

Set-ADComputer as-001 -replace @{ bSBPrimaryUser = "Joe Smith";} 

答えて

0

まず、あなたが探しているプロパティは、dnsnameが、dnshostnamenameではありません。 (名前を使用するだけの場合は、フィルタを使用してスキップし、identityとして渡します)

第2に、ADコマンドレットのフィルタは順方向ではありません。中括弧を使用する場合、式を使用することはできません。二重引用符を使用すると一重引用符はうまく機能しているようです。

Get-ADComputer -filter "dnshostname -eq '$($user.ComputerName)'" 

または、式を変数として定義します。

$ComputerName = $user.ComputerName 
Get-ADComputer -filter {dnshostname -eq $Computername} 
+0

私は変数としてプライマリユーザーを設定すると同時に変更を加えました。私が見たいものが得られたことを確かめるためにいくつかのテストと出力を行ったのと同時に、それはうまくいった。そんなにありがとう、マニュアル編集の時間を節約! –

+0

だから私も少しテストをした、コンピュータ名が間違っている場合は、それをスキップします。それはいいことだ。しかし、どのコンピュータ名をスキップしなかったかを記録するログを作成するにはどうすればよいですか? –

+0

getからsetへのpipingよりむしろ。 getの出力を変数に保存します。それでは、 '$($ null -ne $ get){set} else $ {$ computernameに書込みホストのエラー}'のようなことをすることができます。 – BenH

関連する問題