JEA Invoke Command Issue - PullRequest
       4

JEA Invoke Command Issue

0 голосов
/ 27 апреля 2018

Я работаю над внедрением JEA в мою среду, чтобы наша система Jenkins не имела локальных административных элементов управления на всех наших серверах.

Мне удалось создать файлы JEA и указать команды, которые может запускать учетная запись пользователя. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно передать значение переменной с моего сервера Jenkins на удаленный сервер. Пока я не могу это сделать.

Вот код, который я использую с Powershell:

    $session = New-PSSession -ComputerName "webaoneratebook" -ConfigurationName JEA-A1
$user = "USER"
$File = "C:\users\svc.jenkins.prd\Documents\WindowsPowerShell\FILE.txt"
$myCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user ,(Get-Content $file| ConvertTo-SecureString)
$pass = $MyCredentials.GetNetworkCredential().Password
Start-sleep -s 3
Invoke-Command -Session $session -scriptblock {AnalyzeRatebook} -ArgumentList $pass
Get-PSSession| Remove-PSSession

Независимо от того, что я пробовал, я не могу получить пароль для передачи. В файле JEA PSRC я установил следующие удаленные переменные:

VariableDefinitions =   @{ Name = 'log'; Value = 'D:\inetpub\wwwroot\Jenkinstemp\A1Log.log'}, 
                    @{ Name = 'binpath'; Value = 'D:\inetpub\wwwroot\AscendantOne\bin' },
                    @{ Name = 'user'; Value = 'USER' },
                    @{ Name = 'pass2'; Value = 'TEMP' },
                    @{ Name = 'manifest'; Value = 'D:\inetpub\wwwroot\Jenkinstemp\manifest.xml' }

В файле JEA PSRC я сделал свою функцию такой:

    FunctionDefinitions = @{
    'Name' = 'AnalyzeRatebook'
    'ScriptBlock' = {
                & $binpath\AOImportCmd.exe -u $user -p $pass -o $log -a $manifest
        }
}

И удостоверился, что это также в Видимых функциях.

VisibleFunctions = 'AnalyzeRatebook','TestRatebook',@{ Name = 'AnalyzeRatebook'; Parameters = @{ Name = 'ArgumentList'}}

Если я сделаю Write-Host "& $binpath\AOImportCmd.exe -u $user -p $pass -o $log -a $manifest", я верну все, кроме пароля.

Так может ли кто-нибудь дать совет, как заставить локальную переменную преобразовываться в удаленную систему при использовании JEA?

1 Ответ

0 голосов
/ 30 апреля 2018

Более безопасное разрешение:

Я работал немного больше и нашел лучший ответ, который сохраняет режим NoLanguage JEA. Это полезно, поскольку ConstrainedLanguage Mode и FullLanguage Mode дают слишком много энергии для модификации даже в JEA ограниченных аккаунтах.

В итоге мне пришлось добавить два дополнительных командлета в список VisibleCmdlets. Get-Variable и Set-Variable.

Как только я добавил их, я смог установить систему в режим NoLanguage, а затем передать свои локальные переменные на удаленный хост с помощью команды ICM, указанной ниже:

Invoke-Command -Session $session -scriptblock {AnalyzeRatebook -u"$Using:user" -p"$Using:pass" -o"$Using:log" $Using:manifest}

Альтернативное разрешение

Проблема возникла по трем причинам (редактировать: математика сложна): 1. Режим без языка был настроен. Это изменено в файле PSSC. 2. Ошибка пользователя с тем, как я определил Param в файле PSRC. 3. ICM необходимо изменить в том, как он достиг.

Элемент 1:

Чтобы решить эту проблему, я зашел в файл JEA-A1.PSSC на удаленной системе, а затем (в этом случае никогда не определялся языковой режим) добавил новую строку в файл с именем LanguageMode. LanguageMode = 'FullLanguage'

Элемент 2

Затем я обновил пользовательскую функцию, которую я написал в файле JEA-A1.PSRC, с правильным синтаксисом.

Оригинал:

# Functions to define when applied to a session 
FunctionDefinitions = @{
    'Name' = 'AnalyzeRatebook'
    'ScriptBlock' = {
    Param($user),($pass),($log),($manifest)
            & $binpath\AOImportCmd.exe "-a" $user $pass $log $manifest
            $LASTEXITCODE

        }
}

Исправлено:

# Functions to define when applied to a session 
FunctionDefinitions = @{
    'Name' = 'AnalyzeRatebook'
    'ScriptBlock' = {
    Param($user,$pass,$log,$manifest)
            & $binpath\AOImportCmd.exe "-a" $user $pass $log $manifest
            $LASTEXITCODE

    }
}

Позиция 3:

Наконец, необходимо обновить Invoke-Command вызов для точного чтения и анализа переменных. В моем случае я не мог установить их в одну строку, так как система ожидала паузы между значениями, чтобы показать, что они были.

Invoke-Command -Session $session -scriptblock {Param($user,$pass,$log,$manifest) AnalyzeRatebook -u"$user" -p"$pass" -o"$log" $manifest} -ArgumentList $user,$pass,$log,$manifest

Теперь это работает и передает значения правильно.

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