Цикл PowerShell foreach в AWX / Ansible - PullRequest
       51

Цикл PowerShell foreach в AWX / Ansible

1 голос
/ 27 сентября 2019

Я недавно развернул платформу автоматизации POC, включающую в себя ServiceNow и AWX.У меня есть сценарий использования для автоматизации доступа к серверам Windows.

Форма ServiceNow будет предоставлять мне 10 имен серверов Windows одновременно.

Я написал этот сценарий PowerShell для работы с несколькими объектами компьютера, и он работает, как и ожидалось, когда я запускаю его непосредственно в Windows.Он запрашивает у меня несколько имен компьютеров и работает как положено.Но когда я ставлю тот же сценарий на AWX, он не распознает переменную $Computer, которая является своего рода динамической переменной.Вот скрипт.

function Set-AccessOnRemoteMachine {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $True)]
        [string[]]$ComputerName,

        [Parameter(Mandatory = $True)]
        [string]$User,

        [Parameter(Mandatory = $True)]
        [String]$Group,

        [Parameter(Mandatory = $True)]
        [String]$AccessType
    )

    if (($AccessType -eq 'Grant') -and ($Group -eq 'Remote Desktop Users')) {
        foreach ($Computer in $ComputerName) {
            if ((Invoke-Command -ComputerName $Computer -ScriptBlock { HOSTNAME }) -eq "$Computer" ) {
                Invoke-Command -ComputerName $Computer -ScriptBlock { param($Group, $User) net localgroup $Group $User /add } -ArgumentList $Group, $User
                Write-Output "Successfully added the user $User in the Group $Group on the computer $Computer"
            } else {
                Write-Output "$Computer is not reachble"
            }
        }
    } elseif (($AccessType -eq 'Grant') -and ($Group -eq 'Administrators')) {
        foreach ($Computer in $ComputerName) {
            if ((Invoke-Command -ComputerName $Computer -ScriptBlock { HOSTNAME }) -eq "$Computer" ) {
                Invoke-Command -ComputerName $Computer -ScriptBlock { param($Group, $User) net localgroup $Group $User /add } -ArgumentList $Group, $User
                Write-Output "Successfully added the user $User in the Group $Group on the computer $Computer"
            } else {
                Write-Output "$Computer is not reachble"
            }
        }
    } elseif (($AccessType -eq 'Revoke') -and ($Group -eq 'Remote Desktop Users')) {
        foreach ($Computer in $ComputerName) {
            if ((Invoke-Command -ComputerName $Computer -ScriptBlock { HOSTNAME }) -eq "$Computer" ) {
                Invoke-Command -ComputerName $Computer -ScriptBlock { param($Group, $User) net localgroup $Group $User /delete } -ArgumentList $Group, $User
                Write-Output "Successfully added the user $User in the Group $Group on the computer $Computer"
            } else {
                Write-Output "$Computer is not reachble"
            }
        }
    } elseif (($AccessType -eq 'Revoke') -and $Group -eq ('Administrators')) {
        foreach ($Computer in $ComputerName) {
            if ((Invoke-Command -ComputerName $Computer -ScriptBlock { HOSTNAME }) -eq "$Computer" ) {
                Invoke-Command -ComputerName $Computer -ScriptBlock { param($Group, $User) net localgroup $Group $User /delete } -ArgumentList $Group, $User
                Write-Output "Successfully added the user $User in the Group $Group on the computer $Computer"
            } else {
                Write-Output "$Computer is not reachble"
            }
        }
    }
}

Set-AccessOnRemoteMachine -ComputerName $Computer -Group $Group -User $User -AccessType $AccessType

Вот ошибка, которую я получаю в AWX.

Invoke-Command : One or more computer names are not valid. If you are trying to
pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of
strings.
At C:\temp\Set-AccessOnRemoteMachine.ps1:28 char:9
+ Invoke-Command -ComputerName $Computer -ScriptBlock { param($ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo          : InvalidArgument: (System.String[]:String[]) [Invoke-Command], ArgumentException
     + FullyQualifiedErrorId : PSSessionInvalidComputerName,Microsoft.PowerShell.Commands.InvokeCommandCommand

Пожалуйста, помогите мне понять, как обрабатывать цикл PowerShell foreach в AWX и Ansible Core.

...