Проблема с выполнением Remote Powershell ps1 - PullRequest
1 голос
/ 27 марта 2011

Сегодня у меня та же проблема, и я не могу найти решение, поиск в WEB прочитанных тоннах статей, но безуспешно.Моя проблема с запуском скрипта PowerShell на удаленной машине.Если я запускаю этот скрипт локально - он работает, но удаленно нет.

Это моя полная история.


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 "$domainUser@$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 !!! 

1 Ответ

1 голос
/ 01 апреля 2011

Правильно ли я прочитал, что существует только один файл сценария, только на локальном сервере, а не на любом из удаленных клиентов?

Если это так, то я думаю, что вы должны попробовать этот синтаксис:

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

Я думаю, что происходит, когда вы используете синтаксис блока скриптов:

  1. скрипт-блок, определенный на локальной машине, инкапсулированный как объект
  2. объект scriptblock передается на каждую удаленную машину
  3. scriptblock дословно выполняется на удаленной машине, поэтому он ищет ваш файл сценария на машине remote по адресу c: \ windows \ temp (он не существует, поэтому выдает некоторую ошибку BS, запрещающую доступ)

На основании справочной информации о параметре filepath, использование -filepath сделает следующее:

  1. читать в файле скрипта локально, конвертировать содержимое к объекту блока скрипта
  2. объект scriptblock передается каждому удаленная машина
  3. Скриптблок дословно выполнен на удаленная машина, нет ссылок на Файл .ps1 вообще на данный момент
...