我声明了一个元组数组如下:
[System.Tuple[string,string][]] $files = @()
我有以下工作流程:
Workflow Perform-Download
{
Param (
[Parameter(Mandatory = $true)]
[System.Tuple[string,string][]] $Files
)
ForEach -Parallel ($file in $Files)
{
Parallel{Save-File -Url $file.Item1 -DestinationFolder $file.Item2}
}
}
我正在尝试执行以下操作:
Perform-Download -Files $files
但是我收到以下错误:
Perform-Download : Cannot process argument transformation on parameter 'Files'. Cannot convert the
"System.Tuple`2[System.String,System.String][]" value of type "System.Tuple`2[[System.String, mscorlib, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089]][]" to type "System.Tuple".
At line:1 char:26
+ Perform-Download -Files $files
+ ~~~~~~~
+ CategoryInfo : InvalidData: (:) [Perform-Download], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Perform-Download
我做错了什么?
答案 0 :(得分:2)
利用What What Be Cool所写的内容,我尝试了以下内容。基本上$Files
作为[array]
传递,然后它被转换为元组。
我创建了一个虚拟Save-File
,它只将参数写入输出。
我不确定为什么Tuple不能直接作为参数传递,你可能发现了一个错误。
$files = @([System.Tuple]::Create("Flinstone","Rubble"), [System.Tuple]::Create("Simpsons","Flanders"))
function Save-File
{
Param ($URL, $DestinationFolder)
Write-output ("{0} {1}" -f $URL, $DestinationFolder)
}
Workflow Perform-Download
{
Param (
[Parameter(Mandatory = $true)]
[array] $Files
)
$Files = [System.Tuple[string,string][]] $Files
ForEach -Parallel ($file in $Files)
{
Parallel{Save-File -Url $file.Item1 -DestinationFolder $file.Item2}
}
}
Perform-Download -Files $files
答案 1 :(得分:0)
这是一个简单的脚本:
param([System.Tuple[string,string][]]$files)
foreach ($file in $files) {
[console]::WriteLine("Item1: {0}, Item2: {1}", $file.Item1, $file.Item2)
}
然后设置数据并调用脚本。
PS C:\data> $fileList = @([System.Tuple]::Create("Flinstone","Rubble"), [System.Tuple]::Create("Simpsons","Flanders"))
PS C:\data> .\soTuple.ps1 -files $fileList
Item1: Flinstone, Item2: Rubble
Item1: Simpsons, Item2: Flanders
上的这篇文章