web-dev-qa-db-ja.com

Unix / Linuxの「Sudo su-」のようにPowerShellでユーザーを切り替える

PowerShellで管理者としてWindowsサーバーにログインしているときに、パスワードを入力せずに別のユーザーに切り替えるにはどうすればよいですか? LinuxのSudo su -またはsuとまったく同じ機能を探しています。

1
pweruser

このためのカスタム関数を作成する必要があります。以下の関数(下記)を使用して、それを PowerShellプロファイル に入れることができます。

これを使用するには、管理者特権のPowerShellコンソールを使用する必要があります。

ご覧のとおり、_$user_パラメータがあり、デフォルトでadminsystemに設定されています(ここではデフォルトのユーザ名を使用します)。 ValidateSet()では、_$user_パラメータに許可される値を指定できます。

次に、_$user_パラメータに応じてswitch()を実行し、正しいユーザー名とパスワードを読み取ります。

次に、資格情報オブジェクトを作成し、目的のユーザーとしてpssessionを作成します。

スクリプトではプレーンテキストとしてパスワードを使用することをお勧めします! this に従って、パスワードをスクリプトに安全に保存する必要があります

_function switch-psuser {

    Param(
        [Parameter(Position=0)]
        [ValidateSet("adminsystem","administrator")]
        $User = "adminsystem"
    )

    switch($User)
    {
        'adminsystem'   { $username = "domain\adminsystem" ; $pw = "yyy"}
        'administrator' { $username = "domain\administrator" ; $pw = "zzz" }
    }

    $password = $pw | ConvertTo-SecureString -AsPlainText -Force
    $cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username,$password
    New-PSSession -Credential $cred | Enter-PSSession
}
_

出力例:

_PS C:\WINDOWS\system32> switch-psuser
[localhost]: PS C:\Users\adminsystem\Documents> whoami
domain\adminsystem
[localhost]: PS C:\Users\adminsystem\Documents> exit

PS C:\WINDOWS\system32> switch-psuser administrator
[localhost]: PS C:\Users\Administrator.DOMAIN\Documents> whoami
DOMAIN\administrator
[localhost]: PS C:\Users\Administrator.DOMAIN\Documents> exit
PS C:\WINDOWS\system32>
_

この例では、_$user_に値を指定しない場合、デフォルトのユーザーが使用されます。 ValidateSet()およびswitch()にあるユーザー名を指定すると、そのユーザー名が使用されます

それがあまり複雑ではないことを願っています。

2
SimonS