0

以下のコードをいじっています。PoshRSJob を作成し、そこで実行空間で関数fooを再度実行する必要があります。

$listパラメータを[array]orに変換できるようにしたいのですが[string[]]、そうするとエラーがスローされます。配列を文字列にフラット化することを検討しましたが、文字列に$list3スペースまたはコンマを含めるように変更すると、エラーもスローされます。問題の原因は次の行だと思いますが、この問題を回避するために何をすべきか、またはその理由がわかりません。

ScriptBlock = [scriptblock]::Create("`$_ | $($PSCmdlet.MyInvocation.MyCommand.Name) -Parallel:`$false -fn:$fn -sqlQuery:$SQLQuery -option:$option -List:$List")

コード:

function foo {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
        [Alias("ComputerName")]
        [PSObject] $InputObject,
        [switch] $Parallel = $true,
        [string] $fn,
        [string] $sqlQuery = "none",
        [string] $option = "none",
        [int] $number,
        [int] $Throttle = 100,
#Want this to be [array] or [string[]] :
        [string] $List = "none" 
    )

    begin {
        $batch = [System.Guid]::NewGuid().Guid  #run all jobs under same batch number
    }

    process {
        if ($Global:debugging -eq $true){$host.ui.WriteDebugLine("fn:$fn | SQLQuery:$sqlQuery")}
        if (!$Parallel) {
            $server = $InputObject.name
            switch($fn){
                Manage{ return $list }
            } #end switch
        } else {#region Parallel run            
            $jobArguments = @{
                Throttle = $Throttle
                Batch = $batch
                FunctionsToLoad = $PSCmdlet.MyInvocation.MyCommand.Name
#This is the problematic line:
                ScriptBlock = [scriptblock]::Create("`$_ | $($PSCmdlet.MyInvocation.MyCommand.Name) -Parallel:`$false -fn:$fn -sqlQuery:$SQLQuery -option:$option -List:$List")
            }
            if ($_ -and $_ -isnot [string]) { $serverName=$_ } else { $serverName=$InputObject.name }
            @(if ($_ -and $_ -isnot [string]) { $_ } else { $InputObject }) | Start-RSJob @jobArguments | Out-Null
        } #endregion
    }

    end {#region Wait for results and return them
        if ($Parallel) {
            Get-RSJob -batch $batch | Wait-RSJob -ShowProgress | Out-Null
        }#endregion
    }
}

$obj = New-Object -TypeName PSObject -Property @{
    Name = 'server1'
    Other = 'other'
}
$list2 = $obj
$list3 = "item1-item2"
$list2 | foo -fn 'Manage' -number 2 -option Q -List $list3

これはエラーです:

コマンドがパイプライン入力を使用しないか、入力とそのプロパティがパイプライン入力を使用するパラメーターのいずれとも一致しないため、入力オブジェクトをコマンドのパラメーターにバインドできません。

リストを実行空間に渡すことができるように、これを機能させる方法を知っている人はいますか?

4

0 に答える 0