绑定参数时空字符串错误 - 间接脱落



我试图用paramaters

运行此作业
    $courses =  { 
            param($securitytoken_path_a1  ,$EmailPasswordPath_a1 ,$EmailTo_a1)
            Write-Host $securitytoken_path_a1 | Format-Table -Property *
            C:UserssoDesktopCanvasColleagueIntergrationPowerShellsDownloadInformation.ps1 -securitytoken_path ($securitytoken_path_a1) -emailPasswordPath $EmailPasswordPath_a1 -object "courses" -EmailTo $EmailTo_a1 -test $false
            }

我正在传递这些参数

$args1 = @{ "securitytoken_path_a1"  = "C:CredentialsCANVAS_API_PROD_FRANCO.TXT" ; "EmailPasswordPath_a1" = "C:CredentialsEMAILFRANCO.txt"; "EmailTo_a1" = 'fpettigrosso@holyfamily.edu'}

当我使用此命令调用工作时,它会失败

Start-Job -ScriptBlock $courses -Name "Test" -ArgumentList $args1

当我尝试查看问题是什么时,我会收回错误

无法将参数绑定到参数" emailpasswordpath",因为它是一个空字符串。 categoryInfo:InvalidData:(:) [下载Information.ps1],parameterBindingValidationException flutlqualifiedErrid:parameterargumentValidationErrementRorRoremtringNotallowed,downloadinformation.ps1 PSComputerName:localhost

帮助

您要寻找的是 splatting :通过A hashtable 传递一组参数值的能力(或更少commonl,通过数组(到命令。

一般,为了向Splat的意图发出信号 ,需要a special sigil - @,以区分它与恰好是一个标题的单个论点:

  • $args1通过恰好是散布的参数。

  • @args1-请注意Sigil $是如何用@替换的 - 告诉PowerShell应用 splatting ,即,考虑到hashtable的键值配对,为参数 - name-name-name对(请注意,标志性键不得从-开始,这是暗示的(

但是,splatting仅适用于给定命令的直接,您不能通过命令的单个参数。>也就是说,尝试使用-ArgumentList @args1实际上失败

您自己的解决方案可通过将标签AS-IS传递给脚本块,然后明确访问该标签的条目。

另一种解决方案是使用Hashtable参数在脚本块中应用splatting

$courses = { 
  param([hashtable] $htArgs) # pass the hashtable - to be splatted later - as-is
  $script = 'C:UsersfpettigrossoDesktopCanvasColleagueIntergrationPowerShellsDownloadInformation.ps1'
  & $script @htArgs  # use $htArgs for splatting
}   

请注意, target命令的参数名称必须完全匹配hashtable键(或作为明确的前缀,但这是不明智的(,因此_a1的后缀必须从键。

如果不是一个选项,则可以使用以下命令创建一个修改的副本,其键已删除了_a1后缀:

# Create a copy of $args1 in $htArgs with keys without the "_a1" suffix.
$args1.Keys | % { $htArgs = @{} } { $htArgs.($_ -replace '_a1$') = $args1.$_ }

我更改了$courses中的参数

$courses =  { 
            param($a1)
            Write-Host $a1.securitytoken_path_a1 | Format-Table -Property *
            C:UsersfpettigrossoDesktopCanvasColleagueIntergrationPowerShellsDownloadInformation.ps1 -securitytoken_path $a1.securitytoken_path_a1 -emailPasswordPath $a1.EmailPasswordPath_a1 -object "courses" -EmailTo $a1.EmailTo_a1 -test $false
            }

相关内容

  • 没有找到相关文章

最新更新