powershell 以管理员身份在远程计算机中运行Invoke-Command

pw136qt2  于 2023-02-08  发布在  Shell
关注(0)|答案(2)|浏览(278)

我正在尝试运行invoke-command以在remote computer上启动powershell script in a powershell file。我正在使用credentials for a user with Administrator privilege。此命令需要由running powershell as an administrator执行。我尝试使用powershell脚本调用的应用程序存在许可问题,因此我无法将凭据更改为Administrator,但需要以该特定用户身份运行。我已尝试在Invoke-Command末尾使用-RunAsAdministrator,但我得到一个错误说:
Invoke-Command : Parameter set cannot be resolved using the specified named parameters.

$command = {
    cd Folder
    C:\Folder\build.ps1
} 
Invoke-Command -ComputerName $RemoteSystemIP -ScriptBlock $command -credential $Credentials1 -ErrorAction Stop -AsJob

我尝试将其作为后台作业执行,这就是我添加-AsJob参数的原因。
已经好几天了,我还没有找到解决办法。

nfs0ujit

nfs0ujit1#

    • TL;医生**
  • 提升远程PowerShell会话执行权限(使用管理员权限)的唯一方法是使用在目标计算机上具有管理员权限的用户帐户(隐式或通过-Credential)进行连接。
  • 使用这样的帐户,会话自动且总是以提升的方式运行。

Invoke-Command的**-RunAsAdministrator开关只能与(虚拟化)* 容器 *(-ContainerId参数)一起使用,而不能与常规远程处理(-ComputerName参数)一起使用。
不能在远程会话中按需 * 提升(就像您可以使用Start-Process -Verb RunAs * 在本地交互式 * 提升一样)。[1]
相反,你必须确保你传递给Invoke-Command -Credential用来连接到远程机器的凭证指向一个(同时)在目标机器上拥有管理权限的用户账户,在这种情况下,远程会话 * 会自动且总是 * 以提升的权限运行。[2]
如果你不能通过这样的认证,我想你运气不好。
测试当前用户是否具有管理权限

# Returns $true if elevated, otherwise $false.
[Security.Principal.WindowsPrincipal]::new(
  [Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)

另外,这里有一个简单的测试,您可以从 * 会话内部*运行,以确定它是否正在使用elevation运行

# Returns $true if elevated, otherwise $false.
[bool] (net session 2>$null)

[1]除非已经 * 提升 * 的会话,否则-Verb RunAs会显示一个弹出的UAC对话框,用户必须交互确认,这在远程会话中不受支持。
[2]如果您使用"loopback remoting",也就是说,如果您通过remoting将 * local * 机器作为目标,例如使用Invoke-Command -ComputerName .,也同样适用,但是有额外的限制:您不能使用授权远程处理但不属于本地Administrators组的用户,如果您使用 * current * 用户(无论是否具有显式凭据),则必须提升 * calling * 会话本身。

ne5o7dgx

ne5o7dgx2#

我觉得你应该这么做:

$command = {
    Start-Process "powershell" -Verb runas -Workingdirectory "C:\Folder\" -ArgumentList "build.ps1"
}

Invoke-Command -ComputerName $RemoteSystemIP -ScriptBlock $command -credential $Credentials1 -ErrorAction Stop -AsJob

相关问题