PowerShell ワークフローのこの奇妙な動作に出くわしたばかりですが、他の誰かがその動作を再現して説明してくれるかどうか知りたいです。
この状況を説明するために、ほぼ同じ 2 つのワークフローを作成しました。唯一の違いは、PSCredential オブジェクトが最初のワークフロー スコープで作成され、2 番目のインライン スクリプトで作成されることです。
まず、次のコードでワークフローを定義します。
workflow WorkflowCred
{
[cmdletbinding()]
Param()
$Password = 'test' | ConvertTo-SecureString -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList 'test',$Password
InlineScript
{
Function Test-Verbose
{
[CmdletBinding()]
Param(
$Credential
)
Write-Output 'Start'
$Credential.GetType().FullName
Write-Verbose 'Testing'
Write-Output 'End'
}
Test-Verbose -Credential $Using:Credential
}
}
workflow InlineCred
{
[cmdletbinding()]
Param()
InlineScript
{
Function Test-Verbose
{
[CmdletBinding(
)]
Param(
$Credential
)
Write-Output 'Start'
$Credential.GetType().FullName
Write-Verbose 'Testing'
Write-Output 'End'
}
$Password = 'test' | ConvertTo-SecureString -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList 'test',$Password
Test-Verbose -Credential $Credential
}
}
今、奇妙に。次の 3 つのコマンドを問題なく実行できます。
WorkflowCred
InlineCred
WorkflowCred -Verbose
しかし、-Verbose を指定して 2 番目のワークフローを実行すると、CTRL+C を押すまでコンソールがフリーズしますか??
InlineCred -Verbose
次の条件がすべて当てはまる場合、この動作を確認できます。
- (PowerShell ワークフローで) InlineScript 内から関数を実行します
- パラメーターの 1 つに、PSCredential 型のオブジェクトが値として与えられます。
- PSCredential オブジェクトは inlinescript 内で作成されます
- 関数は Verbose ストリームへの書き込みです
PowerShell バージョン 3 および 4 でこれを試しました。