1. ホーム
  2. powershell

[解決済み] PowerShellです。エラー "引数 ... を受け入れる位置パラメーターが見つかりません"

2022-01-28 10:26:07

質問

PowerShellスクリプトを2つ持っています。1つは、JSONファイルでいくつかの作業を行う初期スクリプトで、配列の形でいくつかの定数も持っています。

もうひとつは、別のファイル内の関数です。

私のスクリプトでは initial1.ps1 以下のようなコードです。

$IDs=@("02921114-654b-4c28-a9d7-2ebd9ab0ada3",
       "9045c61c-55bc-45b0-0000-ec9858b24867",
       "011b0c6d-5678-4aaa-a833-e62111103f0a")

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

私のPowerShellスクリプトファイル「Add-Folder.ps1`」は、次のようなものです。

[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

しかし、これを実行すると、次のようなエラーが発生します。

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

なぜこのようなエラーが発生するのでしょうか、また、IDの配列を関数に渡すにはどうしたらよいのでしょうか。

解決方法は?

使用方法 $IDs の代わりに @IDs . そうでない場合は、配列が展開されて 複数 の引数を指定します。これは スプラッター .

これは、コマンドの位置引数を配列で集めたり、名前付き引数をハッシュテーブルで集めたりして、そのスプラッタ変数でコマンドを呼び出すのに使います。実際に1つの引数として配列を渡したいときにこれを使うのは、決して必要でもなければ正しくもありません。