gpt4 book ai didi

powershell - 绑定(bind)参数时出现空字符串错误 - 间接飞溅

转载 作者:行者123 更新时间:2023-12-03 01:06:07 25 4
gpt4 key购买 nike

我试图用参数运行这项工作

    $courses =  { 
param($securitytoken_path_a1 ,$EmailPasswordPath_a1 ,$EmailTo_a1)
Write-Host $securitytoken_path_a1 | Format-Table -Property *
C:\Users\so\Desktop\CanvasColleagueIntergration\PowerShells\DownloadInformation.ps1 -securitytoken_path ($securitytoken_path_a1) -emailPasswordPath $EmailPasswordPath_a1 -object "courses" -EmailTo $EmailTo_a1 -test $false
}

我正在传递这些参数
$args1 = @{ "securitytoken_path_a1"  = "C:\Credentials\CANVAS_API_PROD_FRANCO.TXT" ; "EmailPasswordPath_a1" = "C:\Credentials\EMAILFRANCO.txt"; "EmailTo_a1" = 'fpettigrosso@holyfamily.edu'}

当我使用此命令调用作业时,它失败了
Start-Job -ScriptBlock $courses -Name "Test" -ArgumentList $args1

当我尝试查看问题是什么时,我得到了错误

Cannot bind argument to parameter 'emailPasswordPath' because it is an empty string. + CategoryInfo : InvalidData: (:) [DownloadInformation.ps1], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,DownloadInformation.ps1 + PSComputerName : localhost



帮助

最佳答案

你要找的是splatting :通过散列表(或者,不太常见的,通过数组)将一组参数值传递给命令的能力。

通常,为了表示要喷的意图,一个特殊的印记 - @是必需的,以便将其与恰好是哈希表的单个参数区分开来:

  • $args1传递一个恰好是哈希表的参数。
  • @args1 - 注意印记 $已替换为 @ - 告诉 PowerShell 应用 splatting,即将哈希表的键值对视为参数-名称-值对(注意哈希表键不能以 - 开头,这是隐含的)

  • 然而,splatting 只对给定的命令直接起作用, 您不能通过命令的单个参数 传递 splatted 哈希表.
    也就是说,尝试使用 -ArgumentList @args1实际上失败了。

    Your own solution通过将哈希表按原样传递给脚本 block 然后显式地逐一访问该哈希表的条目来解决此问题。

    另一种解决方案是 使用 hashtable 参数在脚本 block 内应用喷溅 :
    $courses = { 
    param([hashtable] $htArgs) # pass the hashtable - to be splatted later - as-is
    $script = 'C:\Users\fpettigrosso\Desktop\CanvasColleagueIntergration\PowerShells\DownloadInformation.ps1'
    & $script @htArgs # use $htArgs for splatting
    }

    但是请注意, 目标命令的参数名称必须与哈希表键完全匹配 (或作为明确的前缀,但这是不明智的),所以 _a1后缀必须从键中删除。

    如果修改输入哈希表的键不是一个选项,您可以使用以下命令创建一个修改后的副本,其键具有 _a1后缀删除:
    # Create a copy of $args1 in $htArgs with keys without the "_a1" suffix.
    $args1.Keys | % { $htArgs = @{} } { $htArgs.($_ -replace '_a1$') = $args1.$_ }

    关于powershell - 绑定(bind)参数时出现空字符串错误 - 间接飞溅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48754887/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com