【问题标题】:PowerShell: Error "A positional parameter cannot be found that accepts argument ..."PowerShell:错误“找不到接受参数的位置参数......”
【发布时间】:2018-02-23 13:02:52
【问题描述】:

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

【问题讨论】:

标签: powershell


【解决方案1】:

使用$IDs 而不是@IDs。否则,数组将被扩展并尝试作为 多个 参数传递。这称为splatting

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

【讨论】:

    【解决方案2】:

    @ 与变量名一起使用会导致parameter splatting,即数组中的值被用作脚本的连续参数。

    【讨论】:

      猜你喜欢
      • 2015-05-21
      • 1970-01-01
      • 2017-11-06
      • 2016-05-27
      • 2018-09-18
      • 2019-05-07
      • 1970-01-01
      • 2016-07-06
      相关资源
      最近更新 更多