2011-03-27 97 views
1

今天我有同样的问题,我找不到解决方案,在WEB中搜索读吨文章,但没有成功。 我在远程计算机上运行PowerShell脚本的问题。 如果我在本地运行此脚本 - 它是有效的,但远程不是。远程PowerShell ps1执行问题

这是我的全部故事。

 

Server: 
Windows 2008 R2 with SP1 + latest updates 
FW – Off 
UAC – ON : 
- User Account Control: Use Admin Approval Mode for the built-in Administrator account – Disable 
- User Account Control: Allow UIAccess applications to prompt for elevation without using the secure desktop. – Disable 
- User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode – Elevate without prompting 
- User Account Control: Detect application installations and prompt for elevation – Disable 
Domain: hardening.com 
Hostname: qwerty12345 

Version of PowerShell is Installed: 

PS C:\Windows\system32> $PSVersionTable 

Name       Value 
----       ----- 
CLRVersion      2.0.50727.5420 
BuildVersion     6.1.7601.17514 
PSVersion      2.0 
WSManStackVersion    2.0 
PSCompatibleVersions   {1.0, 2.0} 
SerializationVersion   1.1.0.1 
PSRemotingProtocolVersion  2.1 


Client: 
Windows 2008 R2 + latest updates 
FW – Off 
UAC – ON : 
- User Account Control: Use Admin Approval Mode for the built-in Administrator account – Disable 
- User Account Control: Allow UIAccess applications to prompt for elevation without using the secure desktop. – Disable 
- User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode – Elevate without prompting 
- User Account Control: Detect application installations and prompt for elevation – Disable 
Domain: systemqa.com 

Version of PowerShell is Installed: 

PS C:\> $PSVersionTable 

Name       Value 
----       ----- 
CLRVersion      2.0.50727.4952 
BuildVersion     6.1.7600.16385 
PSVersion      2.0 
WSManStackVersion    2.0 
PSCompatibleVersions   {1.0, 2.0} 
SerializationVersion   1.1.0.1 
PSRemotingProtocolVersion  2.1 


• On Client installed also PowerCLI 


1. On Server , I have file "C:\Windows\Temp\ ConfigurationWinRM.ps1” with following content: 
winrm set winrm/config/client `@`{TrustedHosts=`"`*`"`} 
winrm set winrm/config/winrs '@{MaxShellsPerUser="100"}' 

2. My mission run those script on remote “Server” machine. 

3. I run following script from “Client” machine but get always same errors: 
Message = Access is denied. 
Error number: -2147024891 0x80070005 

a. Example 1: 
$domainCrd = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "[email protected]$domainNameFQDN",$domainPASS 
$ComputerName = "qwerty12345.hardening.com" 

invoke-command -ComputerName $ComputerName -Credential $domainCrd -ScriptBlock { 
    $FileName = "ConfigurationWinRM.ps1" 
      $ItemLocation = "C:\Windows\Temp\" 
      powershell -NoProfile -Command ". $ItemLocation$FileName" 
} 

b. Example 2: 
$ComputerName = "qwerty12345.hardening.com" 

$securePassword = ConvertTo-SecureString "**********" -AsPlainText -force 
$credential = New-Object System.Management.Automation.PsCredential("$domainName\$domainUser",$securePassword) 

Invoke-Command -ComputerName $ComputerName -ScriptBlock { 
      $FileName = "ConfigurationWinRM.ps1" 
      $ItemLocation = "C:\Windows\Temp\" 
      powershell -Command ". $ItemLocation$FileName" 

} -Credential $credential 

c. Example 3: 
[ScriptBlock] $global:runFile = { 

$FileName = "ConfigurationWinRM.ps1" 
### $ItemLocation = "C:\Windows\Temp\" 
$ItemLocation = "$env:windir\Temp\" 

& "$ItemLocation$FileName" 
} 

RemotePowerShellConnect domain $runFile 


WSManFault 
    + CategoryInfo   : NotSpecified: (WSManFault:String) [], RemoteException 
    + FullyQualifiedErrorId : NativeCommandError 

    Message = Access is denied. 
Error number: -2147024891 0x80070005 
Access is denied. 
WSManFault 
    Message = Access is denied. 
Error number: -2147024891 0x80070005 
Access is denied. 
[vSphere PowerCLI] C:\> $error[0] | Format-List * -Force 


PSMessageDetails  : 
OriginInfo   : qwerty12345.hardening.com 
Exception    : System.Management.Automation.RemoteException: 
         Error number: -2147024891 0x80070005 
         Access is denied. 

TargetObject   : 
CategoryInfo   : NotSpecified: (:) [], RemoteException 
FullyQualifiedErrorId : NativeCommandErrorMessage 
ErrorDetails   : 
InvocationInfo  : 
PipelineIterationInfo : {} 



d. Example 4: 
[vSphere PowerCLI] C:\> [ScriptBlock] $global:www = { 
$FileName = "ConfigurationWinRM.ps1" 
$ItemLocation = "C:\Windows\Temp\" 

function Invoke-Admin() { 
    param ([string]$program = $(throw "Please specify a program"), 
      [string]$argumentString = "", 
      [switch]$waitForExit) 

    $psi = new-object "Diagnostics.ProcessStartInfo" 
    $psi.FileName = $program 
    $psi.Arguments = $argumentString 
    $psi.Verb = "runas" 
    $proc = [Diagnostics.Process]::Start($psi) 
    if ($waitForExit) { 
     $proc.WaitForExit(); 
    } 
} 

Write-Host -ForegroundColor Green "Invoke-Admin powershell $ItemLocation$FileName" 
Invoke-Admin powershell $ItemLocation$FileName 

} 

[vSphere PowerCLI] C:\> RemotePowerShellConnect domain $www 
Session state: Opened 
Session availability: Available 
Running 
Service is running ... 
You connect to VM Remote PowerShell ... 
Invoke-Admin powershell C:\Windows\Temp\ConfigurationWinRM.ps1 
[vSphere PowerCLI] C:\> 
[vSphere PowerCLI] C:\> 

Nothing heppend !!!!! No updates on remote “Server” machine !!! 

e. Example 5: 
.\tmp\psexec -d \\$hostNAME -u $domainName\$domainUser -p $myPASS cmd /C START /WAIT powershell %windir%\Temp\ConfigurationWinRM.ps1 

PsExec v1.98 - Execute processes remotely 
Copyright (C) 2001-2010 Mark Russinovich 
Sysinternals - www.sysinternals.com 


cmd started on qwerty12345 with process ID 3860. 
[vSphere PowerCLI] C:\> 

Nothing heppend !!!!! No updates on remote “Server” machine !!! 

+0

有关于它的全部源代码,任何解决 的.ps1文件中没有引用? – Kiquenet 2012-05-30 07:27:34

回答

1

上午我在读纠正只有一个脚本文件,只有本地服务器上,而不是在任何远程的客户?

如果是这样的话,那么我认为你应该试试这个语法:

$FileName = "ConfigurationWinRM.ps1" 
$ItemLocation = "C:\Windows\Temp\" 
Invoke-Command -ComputerName $ComputerName -filepath "$ItemLocation$FileName" -cred $credential 

我觉得发生了什么,当你使用脚本块语法是:定义本地机器上

  1. 脚本块,封装作为对象
  2. 将scriptblock对象传递给每个远程机器
  3. scriptblock在远程机器上逐字执行,因此它在寻找g下对远程机脚本文件位于C:\ WINDOWS \ TEMP(它不存在,所以它抛出一些BS拒绝访问的错误)根据帮助信息的文件路径参数,使用

- 文件路径将执行以下操作来代替:

  1. 读脚本文件在本地,转换 内容一个脚本块对象
  2. 脚本块对象传递给每个 远程机器
  3. 在 远程机器上执行逐字
  4. 脚本块,都在这一点上