ユーザーが終了する必要があると判断するまで、バックグラウンド ジョブを実行するはずの powershell スクリプトがあります。バックグラウンド ジョブは、次のスクリプト ブロックです。
$block =
{
param(
[Parameter(Mandatory = $true, Position = 0, valueFromPipeline = $true)]
$Counters,
[Parameter(Mandatory = $true, Position = 1, valueFromPipeline = $false)]
[ref]$killSwitch,
[Parameter(Mandatory = $false, Position = 2, valueFromPipeline = $false)]
[long]$SampleInterval = 1000
)
[System.Diagnostics.Stopwatch]$sw = New-Object System.Diagnostics.StopWatch
$sw.Start()
$last = 0
$report = New-Object PSObject
$report | Add-Member -MemberType NoteProperty -Name Start -Value ([DateTime]::Now)
while(!$killSwitch)
{
if($sw.ElapsedMilliseconds -gt $last + $SampleInterval)
{
$rec = Get-CounterSample -counters $Counters
$report | Add-Member -MemberType NoteProperty -Name $sw.ElapsedMilliseconds -Value $rec
$last = $sw.ElapsedMilliseconds
}
}
$report | Add-Member -MemberType NoteProperty -Name End -Value ([DateTime]::Now)
return $report
}
ご覧のとおり、ユーザー/呼び出し元が完了したらループ$killSwitch
を停止する方法として、ブール値 ( )を渡そうとしています。While
私は次のように呼んでいます。
[bool]$kill = $false
$job = Start-Job -Name twProcMon -ScriptBlock $block -ArgumentList $Counters, ([ref]$kill), $SampleInterval
Read-Host
$kill = $true
Wait-Job $job
Receive-Job $job
エラーが発生します:
パラメータ 'killSwitch' で引数の変換を処理できません。引数には参照型が必要です。
ジョブの外部から while ループを強制終了できるように、コード ブロックへの参照によって bool を渡すにはどうすればよいですか? 出来ますか?