我正在尝试运行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
参数的原因。
已经好几天了,我还没有找到解决办法。
2条答案
按热度按时间nfs0ujit1#
-Credential
)进行连接。Invoke-Command
的**-RunAsAdministrator
开关只能与(虚拟化)* 容器 *(-ContainerId
参数)一起使用,而不能与常规远程处理(-ComputerName
参数)一起使用。您不能在远程会话中按需 * 提升(就像您可以使用
Start-Process -Verb RunAs
* 在本地交互式 * 提升一样)。[1]相反,你必须确保你传递给
Invoke-Command -Credential
用来连接到远程机器的凭证指向一个(同时)在目标机器上拥有管理权限的用户账户,在这种情况下,远程会话 * 会自动且总是 * 以提升的权限运行。[2]如果你不能通过这样的认证,我想你运气不好。
要测试当前用户是否具有管理权限:
另外,这里有一个简单的测试,您可以从 * 会话内部*运行,以确定它是否正在使用elevation运行:
[1]除非已经 * 提升 * 的会话,否则
-Verb RunAs
会显示一个弹出的UAC对话框,用户必须交互确认,这在远程会话中不受支持。[2]如果您使用"loopback remoting",也就是说,如果您通过remoting将 * local * 机器作为目标,例如使用
Invoke-Command -ComputerName .
,也同样适用,但是有额外的限制:您不能使用授权远程处理但不属于本地Administrators
组的用户,如果您使用 * current * 用户(无论是否具有显式凭据),则必须提升 * calling * 会话本身。ne5o7dgx2#
我觉得你应该这么做: