PowerShell:错误“无法找到接受参数的位置参数...”

时间:2018-02-23 13:02:53

标签: powershell

我有两个PowerShell脚本。一个是初始脚本,它对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

我的名为'Add-Folder.ps1`的PowerShell脚本文件如下所示:

[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数组传递给我的函数?

2 个答案:

答案 0 :(得分:1)

使用$IDs代替@IDs。否则,数组将被展开并尝试作为多个参数传递。这称为splatting

您可以使用它来收集数组中命令的位置参数,或哈希表中的命名参数,然后使用该splatted变量调用该命令。当你真的想要将数组作为单个参数传递时,使用它是绝对必要或正确的。

答案 1 :(得分:1)

使用带有变量名的ID <- rep(1, 36) Attitude <- rep(c('A1', 'A2','A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9'), length.out =36) Answer_a <- rep(1:5, length.out = 36) time <- as.character(rep(c(0, 1, 3, 4), each = 9)) df <- data.frame(ID, Attitude, Answer_a, time) df$time <- as.character(df$time) 会导致parameter splatting,即数组中的值被用作脚本的连续参数。