我有两个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数组传递给我的函数?
答案 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,即数组中的值被用作脚本的连续参数。