如何使用 PowerShell 在具有管理员权限的远程计算机上运行命令(例如:以管理员身份运行)。
到目前为止我已经尝试过
start-process powershell.exe -verb runas -argumentlists ".\test.ps1"
这是失败的。
答案1
执行远程命令
使用 Invoke-Command cmdlet 在远程计算机上运行命令。语法如下:
Invoke-Command -ScriptBlock <COMMAND> -ComputerName <COMPUTER> -credential <USERNAME>
COMMAND 是您要运行的命令,COMPUTER 是远程计算机的主机名,USERNAME 是您要在其下运行命令的帐户的用户名。系统将提示您输入密码。
启动远程会话
使用 Enter-PSSession cmdlet 启动远程 PowerShell 会话,您可以在其中使用 Invoke-Command 的 Session 参数运行多个命令:
Enter-PSSession -ComputerName <COMPUTER> -Credential <USERNAME>
来源: http://www.howtogeek.com/117192/how-to-run-powershell-commands-on-remote-computers/
答案2
Invoke-Command
不能用于需要提升的情况。此外,我发现接受的答案有点不完整。但是,就我而言,我想运行文件.exe
而不是脚本,但我相信我的解决方案也可以适应处理脚本。
下面的脚本将:
- 启动 PowerShell 会话
$EXE
运行变量中指定的命令- 等待它完成
- 终止会话
在作业完成之前不要终止会话,否则您将终止您启动的进程。要并行运行此操作,请在终止会话之前删除-Wait
参数并观察作业。Start-Process
# Enter or already have some administrative-level credentials here
$Cred=Get-Credential
$EXE='"<path to exe>"'
$Arguments=@(<array of arguments>)
$ScriptString="Start-Process -FilePath $EXE -ArgumentList @('$(Arguments -join "','")') -WindowStyle Hidden -Verb RunAs -Wait"
$ScriptBlock=[System.Management.Automation.ScriptBlock]::Create($ScriptString)
$Session=New-PSSession -ComputerName <target computer> -EnableNetworkAccess -Name <name of session> -Credential $Cred
$Job=Invoke-Command -Session $Session -ScriptBlock $ScriptBlock -AsJob
Wait-Job -Job $Job > $null
Remove-PSSession -Session $Session