none
リモート接続で「パスワード変更不可」と「パスワード無期限」の設定ができない RRS feed

  • 質問

  • お世話になっております。

    リモート接続でユーザー作成をし、「パスワード変更不可」と「パスワード無期限」の設定をするために

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    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
    2020年10月28日 4:18

回答

  • 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セッションに送信する方法もあります。


    2020年10月28日 6:53
    モデレータ

すべての返信

  • https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.localaccounts/set-localuser
    Set-LocalUserでadd以外全部できませんか?

    jzkey

    2020年10月28日 6:12
  • jzkeyさん

    Set-LocalUserですが、PowerShell4.0で実行できませんでした。

    ご返信ありがとうございます。


    2020年10月28日 6:37
  • 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セッションに送信する方法もあります。


    2020年10月28日 6:53
    モデレータ
  • 牟田口大介さん

    ご返信ありがとうございます。

    部分式演算子を利用して設定ができました。ありがとうございます。

    2020年10月28日 7:15