今天我有同样的问题,我找不到解决方案,在 WEB 阅读大量文章中搜索但没有成功。我在远程机器上运行 PowerShell 脚本的问题。如果我在本地运行这个脚本——它可以工作,但远程不行。
这是我的全部故事。
服务器: Windows 2008 R2 SP1 + 最新更新 FW – 关闭 UAC - 开: - 用户帐户控制:对内置管理员帐户使用管理员批准模式 - 禁用 - 用户帐户控制:允许 UIAccess 应用程序在不使用安全桌面的情况下提示提升。– 禁用 - 用户帐户控制:管理员批准模式下管理员的提升提示行为 - 提升而不提示 - 用户帐户控制:检测应用程序安装并提示提升 - 禁用 域名:hardening.com 主机名:qwerty12345 已安装 PowerShell 版本: PS C:\Windows\system32> $PSVersionTable 名称 值 ---- ----- CLRVersion 2.0.50727.5420 构建版本 6.1.7601.17514 PS版本 2.0 WSManStack 版本 2.0 PSCompatibleVersions {1.0, 2.0} 序列化版本 1.1.0.1 PSRemotingProtocolVersion 2.1 客户: Windows 2008 R2 + 最新更新 FW – 关闭 UAC - 开: - 用户帐户控制:对内置管理员帐户使用管理员批准模式 - 禁用 - 用户帐户控制:允许 UIAccess 应用程序在不使用安全桌面的情况下提示提升。– 禁用 - 用户帐户控制:管理员批准模式下管理员的提升提示行为 - 提升而不提示 - 用户帐户控制:检测应用程序安装并提示提升 - 禁用 域名:systemqa.com 已安装 PowerShell 版本: PS C:\> $PSVersionTable 名称 值 ---- ----- CLRVersion 2.0.50727.4952 构建版本 6.1.7600.16385 PS版本 2.0 WSManStack 版本 2.0 PSCompatibleVersions {1.0, 2.0} 序列化版本 1.1.0.1 PSRemotingProtocolVersion 2.1 • 在客户端上还安装了 PowerCLI 1. 在服务器上,我有文件“C:\Windows\Temp\ ConfigurationWinRM.ps1”,内容如下: winrm 设置 winrm/config/client `@`{TrustedHosts=`"`*`"`} winrm 设置 winrm/config/winrs '@{MaxShellsPerUser="100"}' 2. 我的任务是在远程“服务器”机器上运行这些脚本。 3. 我从“客户端”机器运行以下脚本,但总是得到相同的错误: 消息 = 访问被拒绝。 错误号:-2147024891 0x80070005 一个。示例 1: $domainCrd = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "$domainUser@$domainNameFQDN",$domainPASS $ComputerName = "qwerty12345.hardening.com" 调用命令 -ComputerName $ComputerName -Credential $domainCrd -ScriptBlock { $FileName = "配置WinRM.ps1" $ItemLocation = "C:\Windows\Temp\" powershell -NoProfile -Command ".$ItemLocation$FileName" } 湾。示例 2: $ComputerName = "qwerty12345.hardening.com" $securePassword = ConvertTo-SecureString "**********" -AsPlainText -force $credential = 新对象 System.Management.Automation.PsCredential("$domainName\$domainUser",$securePassword) 调用命令 -ComputerName $ComputerName -ScriptBlock { $FileName = "配置WinRM.ps1" $ItemLocation = "C:\Windows\Temp\" powershell -Command ".$ItemLocation$FileName" } -凭证 $凭证 C。示例 3: [脚本块] $global:runFile = { $FileName = "配置WinRM.ps1" ### $ItemLocation = "C:\Windows\Temp\" $ItemLocation = "$env:windir\Temp\" & "$ItemLocation$FileName" } RemotePowerShellConnect 域 $runFile WSManFault + CategoryInfo : NotSpecified: (WSManFault:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError 消息 = 访问被拒绝。 错误号:-2147024891 0x80070005 访问被拒绝。 WSManFault 消息 = 访问被拒绝。 错误号:-2147024891 0x80070005 访问被拒绝。 [vSphere PowerCLI] C:\> $error[0] | 格式列表 * -Force PSMessage详细信息: 来源信息:qwerty12345.hardening.com 异常:System.Management.Automation.RemoteException: 错误号:-2147024891 0x80070005 访问被拒绝。 目标对象: CategoryInfo : NotSpecified: (:) [], RemoteException fullyQualifiedErrorId : NativeCommandErrorMessage 错误详情 : 调用信息: 管道迭代信息:{} d。示例 4: [vSphere PowerCLI] C:\> [脚本块] $global:www = { $FileName = "配置WinRM.ps1" $ItemLocation = "C:\Windows\Temp\" 函数调用管理(){ 参数 ( [string]$program = $(throw "请指定一个程序" ), [字符串]$argumentString = "", [开关]$waitForExit ) $psi = 新对象“Diagnostics.ProcessStartInfo” $psi.FileName = $程序 $psi.Arguments = $argumentString $psi.Verb = "runas" $proc = [Diagnostics.Process]::Start($psi) 如果($waitForExit){ $proc.WaitForExit(); } } 写入主机 -ForegroundColor 绿色“调用管理员 powershell $ItemLocation$FileName” 调用管理员 powershell $ItemLocation$FileName } [vSphere PowerCLI] C:\> RemotePowerShellConnect 域 $www 会话状态:已打开 会话可用性:可用 跑步 服务正在运行... 您连接到 VM 远程 PowerShell ... Invoke-Admin powershell C:\Windows\Temp\ConfigurationWinRM.ps1 [vSphere PowerCLI] C:\> [vSphere PowerCLI] C:\> 什么都没发生!!!!远程“服务器”机器上没有更新!!! e. 示例 5: .\tmp\psexec -d \\$hostNAME -u $domainName\$domainUser -p $myPASS cmd /C START /WAIT powershell %windir%\Temp\ConfigurationWinRM.ps1 PsExec v1.98 - 远程执行进程 版权所有 (C) 2001-2010 Mark Russinovich Sysinternals - www.sysinternals.com cmd 在 qwerty12345 上启动,进程 ID 为 3860。 [vSphere PowerCLI] C:\> 什么都没发生!!!!远程“服务器”机器上没有更新!!!