2011-03-27 2 views
1

오늘은 동일한 문제가 있으며 해결 방법을 찾을 수 없습니다. 웹 검색은 기사를 읽지 만 성공하지는 못합니다. 원격 컴퓨터에서 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

답변

1

건가요?

  1. 스크립트 블록은 로컬 시스템에 정의 된 캡슐화 : 당신은 스크립트 블록 구문은 사용할 때

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

    내가 무슨 일이 일어나고 있는지 생각 : 그런 경우에는

    , 그럼 난 당신이 구문을 시도해야한다고 생각 객체로

  2. 각 원격 컴퓨터에 scriptblock 개체가 전달됨
  3. 스크립트 블록이 원격 컴퓨터에서 그대로 실행되므로 lookin C에서 원격 시스템에서 스크립트 파일에 대한 g : 임시 \ \ 창 (이 때문에 일부 BS 액세스 거부 오류를 던지고 존재하지 않음)

사용 도움말 정보 파일 경로 매개 변수를 기반으로 - 파일 경로는 할 것 대신에 다음 스크립트 파일에서

  1. 읽기 로컬,
  2. 스크립트 블록 개체가 각 원격 시스템
  3. 에 전달 스크립트 블록 개체에를 내용을 변환 원격 시스템에 그대로 실행 6,
  4. 스크립트 블록, 모든이 시점
관련 문제