Adi*_*air 5 powershell invoke-command
我正在尝试运行 invoke-commandpowershell script in a powershell file在remote 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。
已经好几天了,我还没有找到解决方案。
太长了;博士
-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组的权限,并且如果您使用当前用户(无论是否具有显式凭据),则必须提升调用会话本身。
| 归档时间: |
|
| 查看次数: |
56600 次 |
| 最近记录: |