我试图用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
}