2016-04-14 12 views
1

このスクリプトは良いPoweshell私はあなただけの必要があると思うホーム

Get-ADUser -filter * | % { Set-ADUser $_ -HomeDrive "H:" -HomeDirectory ('\\Server \home$\' + $_.SamAccountName) } 

動作しますが、それ

ForEach($User in (Get-ADUser -filter * | Select -ExpandProperty SamAccountName)){ if(-not (HomeDrive "H:" HomeDirectory ('\\server\home$\' + $_.SamAccountName)) | Set-ADUser $_ -HomeDrive "H:" -HomeDirectory('\\HYDAD1\home$\' + $_.SamAccountName)) } 
+0

'-HomeDrive'と'の作品-HomeDirectory'は 'Set-ADUser'へのパラメータで、2番目のバージョンのように使うことはできません。あなたは '$ user.HomeDirectory'をチェックできるように、ユーザアカウントのすべてのプロパティが必要です。つまり、' -ExpandProperty'を使うことはできません。これは他のユーザアカウントのプロパティをすべて失うためです。あなたは本当に 'if()|'を使うことはできません。 'あなたが' if(){} 'を使用する必要があります – TessellatingHeckler

答えて

0

[OK]を、私は今それが

(Get-ADUser -Filter * | Where{$_.Home -ne "H:" -or $_.HomeDirectory -ne ('\\server\home$\' + $_.SamAccountName)}) | % { Set-ADUser $_ -HomeDrive "H:" -HomeDirectory ('\\Server \home$\' + $_.SamAccountName) } 
1

と間違っていただきましたらすぐ、私は変数でない場合は追加として、そのわからない動作していないドライブの接続構文の助けを借りずに、そしておそらく何らかの構造を使っている。上記のコメントで指摘したように、HomeHomeDirectoryはユーザーオブジェクトのプロパティです。それらにアクセスできるようにするには、事前にSelect -Expand samaccountnameを使用することはできません。これは、ユーザーのエイリアスを使用するパイプの下の文字列として渡すだけで、これらのプロパティは含まれません。だから私たちはそのビットを取り除くことから始めます。次に、変数$userを参照して、それらをプロパティとして正しく参照する必要があります。それは$user.home -ne "H:"$user.HomeDirectory -ne ('\\server\home$\' + $user.SamAccountName)のようになります。両方ともに-eqを追加したことに気づくでしょう。これは、等しくないための比較演算子です。それはあなたの文法をちょっとはっきりさせます、今度は構造を見てみましょう。

Ifステートメントにパイプするのではなく、Whereステートメントを使用して、注意が必要なユーザーだけを除外してみましょう。このようにしているので、実際にForEachループにはまだ入っていないので、$userの代わりに$_を使用します。だから、次のようになります。あなたはあなたのスクリプトにこれを組み込む場合

(Get-ADUser -Filter * | Where{$_.Home -ne "H:" -or $_.HomeDirectory -ne ('\\server\home$\' + $_.SamAccountName)}) 

今では、次のようになります。

ForEach($User in (Get-ADUser -Filter * | Where{$_.Home -ne "H:" -or $_.HomeDirectory -ne ('\\server\home$\' + $_.SamAccountName)})){ 
    Set-ADUser $User -HomeDrive "H:" -HomeDirectory('\\HYDAD1\home$\' + $_.SamAccountName) 
} 
+0

テスト広告サーバーでテストしましょう、{$ _。Home -ne" H: " - または$ _。HomeDirectory - これはホームディレクトリ存在しなければ。 – DisplayName

+0

@themadTechnician ForEach(Get-ADUser -Filter * | $ {。ScriptPath 'yyy.bat -ne | Set-ADUser -ScriptPath' yyy.bat ' – DisplayName

+0

)それはうまくいきませんあなたは順序が間違っています大声で...「ScriptPathプロパティ 'yyy.bat'が等しくない場所」と読みます。「ScriptPathプロパティがyyy.batと等しくない場所'Get-ADUser -filter * |ここに{$ _。ScriptPath -ne' yyy.bat '} | Set-ADUser -ScriptPath' yyy.bat'' – TheMadTechnician

関連する問題