有没有办法在powershell中切换用户以运行没有密码提示的命令?

Posted

技术标签:

【中文标题】有没有办法在powershell中切换用户以运行没有密码提示的命令?【英文标题】:Is there a way to switch user in powershell to run a command without password prompt? 【发布时间】:2019-11-22 14:22:38 【问题描述】:

我想使用 powershell 代码在远程机器上注销用户:

$session = ((quser /server:$system | Where-Object  $_ -match $user ) -split ' +')[2]
logoff $session /server:$system

目前这些命令由帐户执行:NT AUTHORITY\SYSTEM 但我想使用另一个用户执行这些命令。

我尝试过使用:

runas /user:administrator /savecred "quser /SERVER:$server"

但它提示输入密码,我想自动执行脚本。有什么方法可以切换用户而无需通过终端传递密码?

【问题讨论】:

如果你能做到这一点,那将是一个重大的安全漏洞。任何恶意软件都可以做同样的事情,绕过为管理员提供适当的凭据。这有意义吗? 哎呀,让我们只允许在没有密码的情况下完成需要管理员权限的事情。这不会有什么问题,不是吗? @KenWhite 完全同意你的看法。有什么方法可以传递凭据,从用户那里获取帐户名和密码,我相信我们不能将凭据直接传递到命令中,即 runas /user:administrator "quser /SERVER:$server" -Credential $Cred 你试过使用Invoke-Command -Credential $(Import-Clixml $CredentialFilepath) -ScriptBlock quser.exe -ComputerName $server吗? @GuentherSchmitz 我试过使用这个命令,它是从 NT AUTHORITY\SYSTEM 用户执行命令,而不是从输入的凭据。我已经使用“[System.Security.Principal.WindowsIdentity]::GetCurrent().Name”命令检查了用户,它仍然返回 NT AUTHORITY\SYSTEM 用户。 【参考方案1】:

首先让我说,出于许多安全原因,这不是一个好主意,其中之一是如果有人可以访问您的脚本,它将可以访问您的密码。无论如何,您想要做的事情是不可能的,但您可以实施一种解决方法。

如果您知道密码,则可以“伪造”用户在提示中输入密码,而不是“运行没有密码提示的命令”,这不会抑制提示,而是会像有人实际输入密码一样写入密码键盘。

要实现这一点,您可以使用SendKeys 函数,它本质上是伪造按键。 这个想法是等待密码提示出现,然后一个字符一个字符地发送密码。

例如,这将发送密钥 Hi,然后按 enter,就像有人实际键入它们一样。

#Write some text
[System.Windows.Forms.SendKeys]::SendWait("Hi")
#Press on Enter
[System.Windows.Forms.SendKeys]::SendWait("ENTER")

不幸的是,我的知识到此结束,因为我从未真正成功使用过它,而是一直依赖手动输入。

【讨论】:

@KenWhite 从未说过这是一个聪明的想法,我只是说明了他如何能够实现他想要的。这就是为什么我写了“首先让我说,出于许多安全原因,这不是一个好主意,其中之一是如果有人可以访问您的脚本,它将可以访问您的密码”。没有必要居高临下... @KenWhite 好吧,从我的看法来看,如果我们只写“不行,做不到”,他只会在其他地方搜索,直到找到它,不妨告诉他一个方法它并说它真的很不安全。只要他用它在家中登录他的 rpi,而不是在核发射代码系统中,如果他想冒险,我没问题。 感谢@JohnSmith,我不会在脚本本身中硬编码密码,脚本可以使用 Export-Clixml 和 Import-Clixml 从安全文件中获取密码。我只想知道我们可以通过将凭据直接传递给命令来切换用户,例如使用 -Credential $Cred

以上是关于有没有办法在powershell中切换用户以运行没有密码提示的命令?的主要内容,如果未能解决你的问题,请参考以下文章

运行powershell脚本,以便检查并邮寄故障

CorelDRAW12打汉字的时候输入中文句号好麻烦,有没办法解决

将桌面路径添加到 powershell 以轻松在文件夹之间切换?

以不同用户身份运行代码以获得提升的权限

Powershell:在 PowerShell 中重新加载路径

Powershell创建密码过期报告