在 PowerShell 中切换用户,如 Unix/Linux 中的“sudo su -”

pwe*_*ser 10 user-accounts powershell administrator

当我在 PowerShell 中以管理员身份登录 Windows 服务器时,如何在不输入密码的情况下切换到其他用户?sudo su -我正在寻找与Linux完全相同的功能su

Sim*_*onS 6

您需要为此编写一个自定义函数。您可以使用以下函数(如下),并将其放入您的PowerShell Profile中。

要使用此功能,您必须使用提升的 PowerShell 控制台。

如您所见,您有一个$user参数,默认设置为adminsystem(此处使用您的默认用户名)。您ValidateSet()可以指定参数允许使用哪些值$user

然后它会switch()根据您的$user参数并读取正确的用户名和密码。

然后它将创建一个凭证对象和一个作为您所需用户的会话。

建议在脚本中使用密码作为纯文本!您应该按照操作将您的密码安全地存储在脚本中

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
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

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>
Run Code Online (Sandbox Code Playgroud)

在此示例中,您可以看到,当不提供任何值时$user,它将采用您的默认用户。ValidateSet()当提供in 中的用户名时,switch()它将采用该用户名

希望这不是太复杂。否则就问:)

  • 我不想将管理员密码存储在文件中。 (2认同)
  • @WhyWhat 有很多方法可以不将密码存储在文件中,至少不以纯文本形式存储。例如 https://www.pdq.com/blog/secure-password-with-powershell-encrypting-credentials-part-2/ (2认同)
  • 是的,那太复杂了。为什么没有一个简单的“sudo su - <用户名>”? (2认同)