Write-Verbose冻结PowerShell工作流

时间:2015-05-04 12:14:18

标签: powershell powershell-workflow

我偶然发现了PowerShell工作流程的这种奇怪行为,现在我很好奇是否有其他人可以重现这种行为,甚至可能向我解释。

为了描述这种情况,我创建了两个几乎完全相同的工作流程。唯一的区别是PSCredential对象是在第一个工作流范围和第二个inlinescript中创建的。

首先,我使用以下代码定义工作流程:

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
    }
}
现在到了陌生。我可以毫无问题地运行以下三个命令:

WorkflowCred
InlineCred
WorkflowCred -Verbose

但如果我使用-Verbose运行第二个工作流程,我的控制台会冻结,直到我按下CTRL + C ??

InlineCred -Verbose

如果满足以下所有条件,我可以看到此行为:

  • 我在InlineScript(在PowerShell工作流程中)运行一个函数
  • 其中一个参数被赋予PSCredential类型的对象作为值
  • PSCredential对象在inlinescript
  • 中创建
  • 该功能是写入详细信息流

我在PowerShell第3版和第4版中试过这个。

0 个答案:

没有答案