Я недавно развернул платформу автоматизации 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.