Windows10、11で現在ログインしているユーザのパスワードを管理者権限なしでpowershellスクリプトで変更する方法はありますか

20927774 85 評価のポイント
2024-07-18T02:04:26.3333333+00:00

Unix系OSにあるpasswdコマンドのように、現在ログインしているユーザのパスワードをログインしているユーザ権限のままpowershellスクリプトで変更する方法はございますでしょうか。

Windows 10
Windows 10
パーソナル コンピューターとタブレットで実行される Microsoft オペレーティング システム。
100 件の質問
{count} 件の投票

承認済みの回答
  1. チャブーン 1,626 評価のポイント MVP
    2024-07-21T20:39:40.3333333+00:00

    チャブーンです。

    このようなスクリプトを実行すればいいと思います。基本的にはADSIのWinNTプロバイダのChangePasswordメソッドを使います。

    なお、Read-Hostの -MaskInputは正常動作しないので、-AsSecureStringで値を取り込んでから平文変換する必要があります。

    以下などを参考にしてください。

    https://10nin.vivaldi.net/2023/10/11/powershellpasswordscript/

    #セキュア文字を平文に変える関数です。
    function InputPassword($Prompt) {
        $Pass = (Read-Host $Prompt -AsSecureString)
        $Bpass = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Pass)
        $Spass = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($Bpass)
        return $Spass
    }
    
    #パスワード条件をインプットします。
    Write-Host "あなたのアカウント名は $ENV:USERNAME です。"
    $OldPassword = InputPassword "現在のパスワードを入力してください"
    $NewPassword = InputPassword "新しいパスワードを入力してください"
    
    #アカウントを指定します。
    # $MyAccount = [ADSI]"WinNT://LocalHost/$ENV:USERNAME" (これがだめだったようです)
    $MyAccount = [ADSI]"WinNT://$ENV:COMPUTERNAME/$ENV:USERNAME"
    
    #パスワードを変更します。パスワード変数は平文である必要があります。
    $MyAccount.ChangePassword($OldPassword, $NewPassword)
    

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Hebikuzure aka Murachi Akira 9,791 評価のポイント MVP
    2024-07-18T02:58:47.4533333+00:00

    「powershell パスワード変更」で Web 検索すればすぐに答えが分かる質問ですが、Set-LocalUser コマンドでパスワード変更が上手くできないのでしょうか?

    $Password = Read-Host -AsSecureString
    $UserAccount = Get-LocalUser -Name "User02"
    $UserAccount | Set-LocalUser -Password $Password
    

  2. Hania Lian 17,286 評価のポイント Microsoft ベンダー
    2024-07-18T03:02:48.0933333+00:00

    こんにちは。

    管理者権限を持たない PowerShell スクリプトを使用して、現在ログインしているユーザーのパスワードを変更することは現実的ではありません。 ユーザーのパスワードの変更は、システムのセキュリティに関わる操作であるため、通常は管理者権限が必要です。

    管理者権限がある場合は、ログインパスワードを変更できます。

    PowerShell で次のコマンドを実行します:

    net user <Username> <new password>

    よろしくお願いいたします

    Hania

    ============================================

    回答が役に立った場合は、「回答を受け入れる」をクリックして賛成票を投じてください。


  3. チャブーン 1,626 評価のポイント MVP
    2024-07-18T05:26:52.6866667+00:00

    チャブーンです。

    この件ですが、Windowsがワークグループの環境であれば、ユーザーパスワードの変更には必ず"旧パスワード"の情報が必要です。どうしてもUNIXっぽくしたいという場合は、su- 相当の動作(管理者権限でのセカンダリログオン)が必要です。

    ただし、Active Directory環境の場合は別です。したのページにあるような「Active DIrectoryの委任」の方法で、特定の非管理者ユーザーにパスワードリセットの権限を与えることで、実現が可能です。実例が「パスワードのリセット」設定ですので、ちょうどよいかと思います。

    https://blogs.manageengine.jp/ou_delegation/


お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。