rundeck не может выполнить скрипт powershell с помощью import-модуля - PullRequest
0 голосов
/ 25 июня 2018

Я запускаю несколько скриптов Python через rundeck (in-line) на целевом узле Windows 2012.Эти сценарии использовались для локального запуска, но теперь находятся в процессе перехода на рабочую площадку.

Один из сценариев python открывает подпроцесс для вызова сценария powershell и чтения выходных данных.

import subprocess
CMD = [r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe ', '-File', r'C:\Users\Osman\Code\mop.ps1']
cmd = CMD[:]
cmd.append('arg1')
cmd.append('arg2')
cmd.append('arg3')
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
r = p.communicate()
print(r)

Швабра.ps1 is

Import-Module MSOnline
$domain = $args[0]
$login = $args[1]
$pass = $args[2]
$EPass = $pass | ConvertTo-SecureString -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PsCredential($login, $EPass)
Connect-MsolService -Credential $Cred
$TenantId = Get-MsolPartnerContract -Domain $domain | Select-Object -ExpandProperty TenantId
Get-MsolAccountSKU -TenantId $TenantId | select SkuPartNumber,ActiveUnits,ConsumedUnits | ConvertTo-Csv -NoTypeInformation

Эта часть кода всегда не выполняется, и если я проверяю stderr, он говорит:

        Connect-MsolService : Exception of type 'Microsoft.Online.Administration.Automation.MicrosoftOnlineException' was thrown.
At C:\Users\Osman\Code\mop.ps1:7 char:1 
+ Connect-MsolService -Credential $Cred

Я не уверен, почему это не удается.Я попытался

Import-Module MSOnline -Verbose

И я вижу загружаемые командлеты.Я попытался создать файл profile.ps1 в папке C:\WINDOWS\system32\WindowsPowerShell\v1.0\.

Все работает нормально, если я выполняю код локально.Я попытался запустить обычный тестовый файл .ps1 'disk.ps1' вместо моего кода, и это прекрасно работает, потому что он не загружает какие-либо модули:

get-WmiObject win32_logicaldisk -Computername $env:computername

Какой обходной путь, чтобы получить скрипт с модулемправильно бегать?стандартный вывод всегда пуст.

Узел зарегистрирован как 64-битный, поэтому я попытался изменить cmd на

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe 

Я попытался скопировать туда файл profile.ps1, скопировал туда Модуль, но все еще не работает через rundeck.

1 Ответ

0 голосов
/ 27 июня 2018

Из вашего описания, поскольку вы можете получить действительный вывод при запуске сценария непосредственно с сервера, возможно, ваша ошибка может быть связана с « Second Hop », который вы используетевойти в MS-Online.В настоящее время плагин Rundeck Python-Winrm поддерживает базовую аутентификацию, аутентификацию ntlm или CredSSP, а аутентификация CredSSP позволяет успешно выполнить второй прыжок.

...