如何使用 powershell 在具有管理员权限的远程计算机上运行命令

如何使用 powershell 在具有管理员权限的远程计算机上运行命令

如何使用 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而不是脚本,但我相信我的解决方案也可以适应处理脚本。

下面的脚本将:

  1. 启动 PowerShell 会话
  2. $EXE运行变量中指定的命令
  3. 等待它完成
  4. 终止会话

在作业完成之前不要终止会话,否则您将终止您启动的进程。要并行运行此操作,请在终止会话之前删除-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

相关内容