none
Orchestrator RRS feed

  • Вопрос

  • Хочу выполнить элементарный скрипт на powershell в orchestrator 2012 R2 возвращает ошибку:

    Connecting to remote server failed with the following error message : Access is denied. For more information, see the about_Remote_Troubleshooting Help topic.

    Exception: PSRemotingTransportException
    Target site: AsyncResult.EndInvoke

    Stack trace:
       at System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
       at System.Management.Automation.Runspaces.Internal.RunspacePoolInternal.EndOpen(IAsyncResult asyncResult)
       at System.Management.Automation.Runspaces.Internal.RemoteRunspacePoolInternal.Open()
       at System.Management.Automation.Runspaces.RunspacePool.Open()
       at System.Management.Automation.RemoteRunspace.Open()
       at ExecutePS.PSConnectAndExecute.RunspaceConnect(String authMethod, Uri uri, String psSchema, PSCredential psCred, Runspace& psRunspace, Int32 connTimeout, Int32 scriptTimeout, Boolean executeAsync)
       at ExecutePS.PSConnectAndExecute.ExecutePS(String authMethod, String uri, String account, String inputPassword, String script, Int32 connTimeout, Int32 scriptTimeout, Boolean executeAsync)
       at ExecutePS.ExecutePSScript.Execute(IActivityRequest request, IActivityResponse response)

    сам скрипт:

    Get-Service -ComputerName  server01 | select Status, Name, DisplayName | export-Csv -Encoding Unicode -NoTypeInformation -Append -Path 'c:\temp\service.csv'

    на Server01 установлен SC Orchestrator и на нем пытаюсь отработать скрипт. Права у пользователя, который забит в поле username на этом сервере "Администратор".

    Подгружен модуль в орчестратор с пощью котого пытаюсь реализовать скрипт: Orchestrator Integration Pack for PowerShell Script Execution 1.2

    Что я не так делаю?



    18 февраля 2014 г. 14:17

Все ответы

  • Попробуйте конструкцию

    $Session = New-PSSession -ComputerName server01
    Invoke-Command -Session $Session -ScriptBlock {
    #  Скрипт
    }

    Ну и конечно на server01 должно быть корректно настроено разрешение на удалённый запуск PS-скриптов.

    UPD:

    Да, ещё попробуйте через "Execute PS Global"


    Если сообщение оказалось полезным, пожалуйста, проголосуйте за него или пометьте в качестве ответа.



    • Изменено Dismantled 19 февраля 2014 г. 9:40
    19 февраля 2014 г. 8:07
  • Попробовал, как вы посоветовали, та же ошибка. Сделал через "Execute PS Global", опять та же ошибка.

    PS C:\> Get-ExecutionPolicy
    RemoteSigned
    PS C:\>


    • Изменено Sergey O O 19 февраля 2014 г. 15:16
    19 февраля 2014 г. 14:58
  • Добавил пользователя в Remote Management Users, хоть он и так администратор на этом сервере. Выполнил 2 команды, которые указаны ниже и сценарий в орчестраторе выполнился. Но файл отсутствует 'c:\temp\service.csv', в который должен выгрузиться список сервисов.

    PS C:\Windows\system32> Get-PSSessionConfiguration

    Name          : microsoft.powershell
    PSVersion     : 4.0
    StartupScript :
    RunAsUser     :
    Permission    : BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

    Name          : microsoft.powershell.workflow
    PSVersion     : 4.0
    StartupScript :
    RunAsUser     :
    Permission    : BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

    Name          : microsoft.powershell32
    PSVersion     : 4.0
    StartupScript :
    RunAsUser     :
    Permission    : BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

    Name          : microsoft.windows.servermanagerworkflows
    PSVersion     : 3.0
    StartupScript :
    RunAsUser     :
    Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed

    PS C:\Windows\system32> Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI
    PS C:\Windows\system32> Enable-PSRemoting

    Сам скрипт:
    $Session = New-PSSession -ComputerName server01 Invoke-Command -Session $Session -ScriptBlock {
    Get-Service -ComputerName server01 | select Status, Name, DisplayName | export-Csv -Encoding Unicode -NoTypeInformation -Append -Path '\\server\c$\Temp\service.csv'
    }

    ... когда выполнил этот скрипт в powershell run administrator файл есть, когда делаю просто в powershell без run administrator, ошибка. Как это можно исправить , чтоб не понижать User Account Controll?



    • Изменено Sergey O O 19 февраля 2014 г. 16:23
    19 февраля 2014 г. 15:53
  • SPN для сервисной у\з оркестратора (или той у\з, под которой выполняется скрипт) настроен корректно? WinRM? Есть ошибки в эвентах системы (особенно ошибки Kerberos)?

    http://technet.microsoft.com/en-us/magazine/ff700227.aspx

    Попробуйте отладку:

    Try
    {
    #    Скрипт
    }
    Catch
    {
        $_ | Out-File log.txt -Append
    }


    Если сообщение оказалось полезным, пожалуйста, проголосуйте за него или пометьте в качестве ответа.


    • Изменено Dismantled 20 февраля 2014 г. 6:57
    20 февраля 2014 г. 6:54
  • Вот подобная тема.


    Если сообщение оказалось полезным, пожалуйста, проголосуйте за него или пометьте в качестве ответа.

    • Предложено в качестве ответа Dismantled 20 февраля 2014 г. 7:07
    • Отменено предложение в качестве ответа Dismantled 21 февраля 2014 г. 13:09
    20 февраля 2014 г. 7:06
  • Попробовал вашу конструкцию:

    Try
    {
    $Session = New-PSSession -ComputerName windows7
    Invoke-Command -Session $Session -ScriptBlock {
    Get-Service -ComputerName windows7 | select Status, Name, DisplayName | export-Csv -Encoding Unicode -NoTypeInformation -Path 'C:\Temp\service.csv'
    }
    }
    Catch
    {
        $_ | Out-File c:\temp\log32432.txt -Append
    }

    Вот результат:

    Invoke-Command : Cannot validate argument on parameter 'Session'. The argument
    is null or empty. Provide an argument that is not null or empty, and then try
    the command again.
    At line:4 char:25
    + Invoke-Command -Session $Session -ScriptBlock {
    +                         ~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [Invoke-Command],
    ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerSh
    ell.Commands.InvokeCommandCommand
     


    • Изменено Sergey O O 21 февраля 2014 г. 9:36
    21 февраля 2014 г. 9:29
  • Это результат влоге? Или скрипт вообще не исполнился?

    А так?

    $Session = New-PSSession -ComputerName windows7
    Invoke-Command -Session $Session -ScriptBlock {
    Try
    {
    Get-Service -ComputerName windows7 | select Status, Name, DisplayName | export-Csv -Encoding Unicode -NoTypeInformation -Path 'C:\Temp\service.csv'
    }
    Catch
    {
        $_ | Out-File c:\temp\log32432.txt -Append
    }
    }
    

    Естественно, запуск скрипта подразумевается не на машине "windows7".

    И тут почитали?
    http://social.technet.microsoft.com/Forums/ru-RU/8bd11a29-6089-4c9b-be59-b0c2c03aab27/orchestrator-2012-sp1-powershell-script-execution-integration-pack?forum=infrastructureru


    Если сообщение оказалось полезным, пожалуйста, проголосуйте за него или пометьте в качестве ответа.

    21 февраля 2014 г. 10:43
  • Это в логе.

    Когда скрипт работает в командной строке и результат есть, файл присутствует со списком сервисов.

    Когда скрипт отрабатывает в орчестреторе ошибок нету в орчестраторе. Но результата нету, самого файла со списком сервисов нету. А в логе есть ошибка.

    При конструкции "А так?" лога нету и файла с результатом тоже нету.

    Credential как-то передать можно в скрипт, те которые забиты в настройках "Execute Powershell Script"?




    • Изменено Sergey O O 21 февраля 2014 г. 11:51
    21 февраля 2014 г. 11:40

  • Credential как-то передать можно в скрипт, те которые забиты в настройках "Execute Powershell Script"?

    Зачем? Оркестратор и так их использует при запуске скрипта.

    Connecting to remote server failed with the following error message : Access is denied.

    Проверяйте настройки SPN для у\з Оркестратора и службы Windows Remoting. Ссылка выше.


    Если сообщение оказалось полезным, пожалуйста, проголосуйте за него или пометьте в качестве ответа.


    • Изменено Dismantled 21 февраля 2014 г. 12:22
    21 февраля 2014 г. 12:19
  • http://blogs.technet.com/b/charlesjoy/archive/2011/05/04/ois-integration-pack-for-powershell-script-execution-1-00.aspx

    Здесь написано, что такая конструкция не используется...........

    NOTE: You will see that there is no extraneous PSSession or
    ScriptBlock code required. There is also no need to string all the lines
    of script together separated by ";". Because this is just like a
    standard OIS object, you can use Published Data and Variables to make
    the script 100% dynamic (I have left the script static so you can see
    what I am executing in the example).

    для меня не понятно как эти spn прописывать.
    • Изменено Sergey O O 21 февраля 2014 г. 13:28
    21 февраля 2014 г. 12:44
  • Атворизацию Kerberos пробовали ставить в настройках?


    Если сообщение оказалось полезным, пожалуйста, проголосуйте за него или пометьте в качестве ответа.

    21 февраля 2014 г. 13:30
  • Да пробовал Kerberos.

    У меня даже нету в справке ключа -A

    C:\Windows\system32>setspn /?
    Usage: setspn [modifiers switch] [accountname]
      Where "accountname" can be the name or domain\name
      of the target computer or user account

      Edit Mode Switches:
       -R = reset HOST ServicePrincipalName
        Usage:   setspn -R accountname
       -S = add arbitrary SPN after verifying no duplicates exist
        Usage:   setspn -S SPN accountname
       -D = delete arbitrary SPN
        Usage:   setspn -D SPN accountname
       -L = list SPNs registered to target account
        Usage:   setspn [-L] accountname

      Edit Mode Modifiers:
       -C = specify that accountname is a computer account
       -U = specify that accountname is a user account

        Note: -C and -U are exclusive.  If neither is specified, the tool
         will interpret accountname as a computer name if such a computer
         exists, and a user name if it does not.

      Query Mode Switches:
       -Q = query for existence of SPN
        Usage:   setspn -Q SPN
       -X = search for duplicate SPNs
        Usage:   setspn -X

        Note: searching for duplicates, especially forestwide, can take
         a long period of time and a large amount of memory.  -Q will execute
         on each target domain/forest.  -X will return duplicates that exist
         across all targets. SPNs are not required to be unique across forests,
         but duplicates can cause authentication issues when authenticating
         cross-forest.

      Query Mode Modifiers:
       -P = suppresses progress to the console and can be used when redirecting
        output to a file or when used in an unattended script.  There will be no
        output until the command is complete.
       -F = perform queries at the forest, rather than domain level
       -T = perform query on the speicified domain or forest (when -F is also used)
        Usage:   setspn -T domain (switches and other parameters)
         "" or * can be used to indicate the current domain or forest.

        Note: these modifiers can be used with the -S switch in order to specify
         where the check for duplicates should be performed before adding the SPN.
        Note: -T can be specified multiple times.

    Examples:
    setspn -R daserver1
       It will register SPN "HOST/daserver1" and "HOST/{DNS of daserver1}"
    setspn -S http/daserver daserver1
       It will register SPN "http/daserver" for computer "daserver1"
        if no such SPN exists in the domain
    setspn -D http/daserver daserver1
       It will delete SPN "http/daserver" for computer "daserver1"
    setspn -F -S http/daserver daserver1
       It will register SPN "http/daserver" for computer "daserver1"
        if no such SPN exists in the forest
    setspn -U -S http/daserver dauser
       It will register SPN "http/daserver" for user account "dauser"
        if no such SPN exists in the domain
    setspn -T * -T bar -X
       It will report all duplicate registration of SPNs in this domain and bar
    setspn -T bar -F -Q */daserver
       It will find all SPNs of the form */daserver registered in the forest to
        which bar belongs

    21 февраля 2014 г. 13:43
  • А попробуйте выполнение скрипта не на сервере Оркестратора, а на стороне, например, сервера SCSM (если они на разных хостах). Также, через Runbook Designer.

    Если сообщение оказалось полезным, пожалуйста, проголосуйте за него или пометьте в качестве ответа.

    21 февраля 2014 г. 14:06
  • не знаю после чего, но оно заработало на ПК. И конструкция изначальная:

    Get-Service -ComputerName windows7 | select Status, Name, DisplayName | export-Csv -Encoding Unicode -NoTypeInformation -Path 'C:\Temp\service1.csv'

    и на 2003 тоже работает.

    Но на windows 2012R2 не работает, сил нету уже 
    • Изменено Sergey O O 21 февраля 2014 г. 14:42
    21 февраля 2014 г. 14:35
  • Не работает под Вин2012? Или не работает на сервере Оркестратора под Вин2012 в момент отладки ранбука?

    Если второе, то ставьте Ранбук Дизайнер на любую другую машину, делайте и отлаживайте ранбук там.  Всё должно работать.


    Если сообщение оказалось полезным, пожалуйста, проголосуйте за него или пометьте в качестве ответа.

    24 февраля 2014 г. 8:05