と間違っていただきましたらすぐ、私は変数でない場合は追加として、そのわからない動作していないドライブの接続構文の助けを借りずに、そしておそらく何らかの構造を使っている。上記のコメントで指摘したように、Home
とHomeDirectory
はユーザーオブジェクトのプロパティです。それらにアクセスできるようにするには、事前に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)
}
'-HomeDrive'と'の作品-HomeDirectory'は 'Set-ADUser'へのパラメータで、2番目のバージョンのように使うことはできません。あなたは '$ user.HomeDirectory'をチェックできるように、ユーザアカウントのすべてのプロパティが必要です。つまり、' -ExpandProperty'を使うことはできません。これは他のユーザアカウントのプロパティをすべて失うためです。あなたは本当に 'if()|'を使うことはできません。 'あなたが' if(){} 'を使用する必要があります – TessellatingHeckler