PowerShell: Eroare „Nu poate fi găsit un parametru pozițional care să accepte argumentul …” (Programare, Powershell)

STORM a intrebat.
a intrebat.

Am două scripturi PowerShell. Unul dintre ele este un script inițial care face unele lucrări pe fișiere JSON și are, de asemenea, unele constante sub forma unui array.

Cel de-al doilea este o funcție în cadrul unui fișier separat.

În scriptul meu initial1.ps1 am următorul cod:

[email protected]("02921114-654b-4c28-a9d7-2ebd9ab0ada3",
       "9045c61c-55bc-45b0-0000-ec9858b24867",
       "011b0c6d-5678-4aaa-a833-e62111103f0a")

. 'D:...dropAdd-Folder.ps1' -AdlsAccountName $Accountname `
                    -PrincipalIds @IDs `
                    -Path $folderToCreate.path `
                    -AadGroupName $aadRoleName

Fișierul meu de script PowerShell numit „Add-Folder.ps1` arată astfel:

[CmdletBinding()]
Param(
   [Parameter(Mandatory=$True,Position=1)]
   [string] $AdlsAccountName,

   [Parameter(Mandatory=$True,Position=2)]
   [string[]] $PrincipalIds,

   [Parameter(Mandatory=$True,Position=3)]
   [string] $Path,

   [Parameter(Mandatory=$True,Position=4)]
   [string] $AadGroupName
)

Write-Host "Hello from 'Add-AdlsFolderWithPermissions.ps1'!"
Write-Host $AdlsAccountName
Write-Host $PrincipalIds
Write-Host $Path
Write-Host $AadGroupName

Dar atunci când îl execut, primesc următoarea eroare:

##[error]A positional parameter cannot be found that accepts argument '9045c61c-55bc-45b0-0000-ec9858b24867'.

De ce se întâmplă această eroare sau cum pot trece matricea de ID-uri la funcția mea?

2 răspunsuri
Joey

Utilizați $IDs în loc de @IDs. În caz contrar, array-ul va fi extins și se va încerca să fie trecut ca mai multe argumente. Acest lucru se numește splatting.

Puteți utiliza acest lucru pentru a colecta fie argumente poziționale pentru o comandă într-o matrice, fie argumente numite într-un hashtable, și apoi să apelați comanda cu această variabilă splatted. Nu este niciodată necesar sau corect să o folosiți atunci când doriți de fapt să transmiteți o matrice ca argument unic.

AdamL

Utilizarea @ cu numele variabilei determină splatting-ul parametrilor, , adică valorile dintr-un array sunt folosite ca parametri consecutivi pentru script.