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

Adi*_*air 5 powershell invoke-command

我正在尝试运行 invoke-commandpowershell script in a powershell fileremote computer. 我正在使用credentials for a user with Administrator privilege. 该命令需要由 执行running powershell as an administrator。我尝试使用 powershell 脚本调用的应用程序存在许可问题,因此我无法更改管理员凭据,但需要使用该特定用户本身运行。我尝试-RunAsAdministrator在 Invoke-Command 末尾使用,但出现错误:

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
Run Code Online (Sandbox Code Playgroud)

我试图将其作为后台作业执行,这就是我添加参数的原因-AsJob

已经好几天了,我还没有找到解决方案。

mkl*_*nt0 7

太长了;博士

  • -Credential让远程 PowerShell 会话以提升的权限(具有管理员权限)执行的唯一方法是与在目标计算机上具有管理员权限的用户帐户(隐式或通过)连接。

  • 有了这样的帐户,会话就会自动且始终以较高的速度运行。


的开关只能与(虚拟化)容器参数)一起使用,不能与常规远程处理(参数)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)
Run Code Online (Sandbox Code Playgroud)

另外,这里有一个简单的测试,您可以从会话内部运行来确定它是否以海拔运行

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

[1] 除非会话已经提升,否则-Verb RunAs会显示一个弹出式 UAC 对话框,用户必须以交互方式确认,这在远程会话中不受支持。

[2] 如果您使用“环回远程处理”,即如果您通过远程处理以本地Invoke-Command -ComputerName .计算机为目标,则使用 ,但有附加限制:您不能使用已获得远程处理授权但不属于远程处理权限的用户。本地Administrators组的权限,并且如果您使用当前用户(无论是否具有显式凭据),则必须提升调用会话本身。