PowerShell foreach loop in AWX

I’ve recently deployed a POC automation platform involving ServiceNow and AWX. I have a use case to automate access to windows servers.

The ServiceNow form will be supplying me 10 windows server names at a time.

I did write this Powershell script to handle multiple computer objects and it works as expected when I run it directly on Windows Server. It does prompt me for multiple computer names and does the work as expected. But when I put the same script on AWX it does not recognize the $Computer variable which is a sort of dynamic variable. Here is the script.

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”
} #if
else {
Write-Output “$Computer is not reachble”
} #else
} #foreach
} #if

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”
} #if
else {
Write-Output “$Computer is not reachble”
} #elser"
} #foreach
} #elseif

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”
} #if
else {
Write-Output “$Computer is not reachble”
} #else
} #foreach
} #elseif

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”
} #if
else {
Write-Output “$Computer is not reachble”
} #else
} #foreach
} #elseif
} #Function

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

Here is the error that I get in 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

There are future use cases in the pipeline that will require foreach PowerShell loop. Hence knowing and making the PowerShell foreach loop work is very crucial for me.

Please help understand how to handle PowerShell foreach loop in AWX and Ansible Core.