当我在 PowerShell 中以管理员身份登录到 Windows 服务器时,如何在不输入密码的情况下切换到另一个用户?我正在寻找与 Linux 完全相同的sudo su -
功能su
。
答案1
您需要为此编写一个自定义函数。您可以使用以下函数(如下),并将其放入您的PowerShell 配置文件。
要使用此功能,您必须使用提升的 PowerShell 控制台。
如您所见,您有一个$user
参数,默认情况下设置为adminsystem
(此处使用您的默认用户名)。ValidateSet()
您可以指定允许$user
参数使用哪些值。
然后它将switch()
根据您的$user
参数读取正确的用户名和密码。
然后它将创建一个凭证对象和一个 pssession 作为您想要的用户。
我不要建议在脚本中使用纯文本形式的密码!你应该遵循这在脚本中安全地存储你的密码
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 的回复更方便,但我注意到 WhyWhat 不想将密码存储在文件中。您可以改用:
New-PSSession -Credential $cred | Enter-PSSession
Get-Credential 是在 -Credential 上定义的 PSCredential 未定义时生成的,它会在提示符中要求您输入用户名和密码。如果您使用的是 Windows Server Core 版本,则此提示符位于 Powershell 窗口中。您的本地计算机不会以任何方式审查凭证,您可以使用类 Windows 格式的 AD 登录DOMAIN\username
。
答案3
从技术上讲,“sudo su -”的意思是“成为 root ”,所以在 powershell 中,这是一个等价的:-
Start-Process "C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe" -Verb RunAs
如果您的电脑已设置为询问这些事情,它可能会打开 UAC 控制弹出窗口来请求权限。
不幸的是,它会打开一个新窗口。