トップ回答者
リモート接続で「パスワード変更不可」と「パスワード無期限」の設定ができない

質問
-
お世話になっております。
リモート接続でユーザー作成をし、「パスワード変更不可」と「パスワード無期限」の設定をするために
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Invoke-Command $session -ScriptBlock {net user $args[0] /add} -ArgumentList $user
Invoke-Command $session -ScriptBlock {net user $args[0] $args[1]} -ArgumentList $user,$password
Invoke-Command $session -ScriptBlock {net user $args[0] /fullname:"$args[1]"} -ArgumentList $user,$full_name
Invoke-Command $session -ScriptBlock {net user $args[0] /comment:"$args[1]"} -ArgumentList $user,$comment
Invoke-Command $session -ScriptBlock {wmic path Win32_UserAccount where "Name= '$args[0]'" set PasswordChangeable=false} -ArgumentList $user
Invoke-Command $session -ScriptBlock {wmic useraccount where "Name='$args[0]'" set PasswordExpires=FALSE} -ArgumentList $user~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以上を実行しました。
上から3コマンドは実行できましたが、下から2コマンドが「利用できるインスタンスがありません。」と表示され、「パスワード変更不可」と「パスワード無期限」の設定ができません。
これはなぜでしょうか?
もしくは、この方法とは別で「パスワード変更不可」と「パスワード無期限」の設定をPowerShell ver4で設定する方法はありますか?ご存じでしたらご教示ください。
- 編集済み kawasa19 2020年10月28日 4:19
回答
-
PowerShell ISEでシンタックスハイライトされた状態を見ていただけば分かると思いますが、
"Name='$args[0]'"
との文字列で、$args[0]がインデックス部分を含めてうまく変数展開されていないのが原因と思われます。
Invoke-Command $session -ScriptBlock {wmic path Win32_UserAccount where "Name= '$($args[0])'" set PasswordChangeable=false} -ArgumentList $user
のように部分式演算子$()を利用してみてはいかがでしょうか。
別解としては、
Invoke-Command $session -ScriptBlock {wmic path Win32_UserAccount where "Name= '$using:user'" set PasswordChangeable=false}
のように、using:ラベルを用いてリモート元の変数(ここでは$user)をキャプチャし、PSセッションに送信する方法もあります。
- 編集済み 牟田口大介Moderator 2020年10月28日 6:57
- 回答としてマーク kawasa19 2020年10月28日 7:14
すべての返信
-
PowerShell ISEでシンタックスハイライトされた状態を見ていただけば分かると思いますが、
"Name='$args[0]'"
との文字列で、$args[0]がインデックス部分を含めてうまく変数展開されていないのが原因と思われます。
Invoke-Command $session -ScriptBlock {wmic path Win32_UserAccount where "Name= '$($args[0])'" set PasswordChangeable=false} -ArgumentList $user
のように部分式演算子$()を利用してみてはいかがでしょうか。
別解としては、
Invoke-Command $session -ScriptBlock {wmic path Win32_UserAccount where "Name= '$using:user'" set PasswordChangeable=false}
のように、using:ラベルを用いてリモート元の変数(ここでは$user)をキャプチャし、PSセッションに送信する方法もあります。
- 編集済み 牟田口大介Moderator 2020年10月28日 6:57
- 回答としてマーク kawasa19 2020年10月28日 7:14