为何InlineScript中赋值Get-AutomationPSCredential后Verbose消息'3'不显示?
为什么Verbose消息'3'不显示?
这个问题我之前也碰到过,核心原因是**Get-AutomationPSCredential在PowerShell Workflow的inlinescript块中执行时,会悄悄修改当前会话的VerbosePreference设置**,哪怕你之前手动把它设成了Continue也没用。
具体原因
当你在inlinescript里调用Get-AutomationPSCredential时,这个Azure Automation专属的cmdlet内部会将VerbosePreference重置为默认的SilentlyContinue,所以在它之后执行的Write-Verbose -Message '3'就会被忽略,不会输出。而如果你不调用这个cmdlet,VerbosePreference保持Continue,消息自然就能正常显示。
两种可行的解决方案
方案1:保存并恢复VerbosePreference
在调用Get-AutomationPSCredential之前,先把当前的VerbosePreference存起来,调用完再恢复:
workflow a { $VerbosePreference = 'Continue' Write-Verbose -Message '0' $Credential1 = Get-AutomationPSCredential -Name CRE-AUTO-WindowsLocalAdmin Write-Verbose -Message '1' inlinescript { Write-Verbose -Message '2' # 先保存当前的VerbosePreference $originalVerbosePref = $VerbosePreference $Credential2 = Get-AutomationPSCredential -Name CRE-AUTO-WindowsLocalAdmin # 恢复原来的VerbosePreference $VerbosePreference = $originalVerbosePref Write-Verbose -Message '3' # 现在就能正常显示了 } }
方案2:在Workflow层面获取凭据,传递给InlineScript
更推荐这种方式,因为避免了在inlinescript里调用Automation cmdlet的潜在问题:
workflow a { $VerbosePreference = 'Continue' Write-Verbose -Message '0' # 在Workflow层面先获取凭据 $Credential1 = Get-AutomationPSCredential -Name CRE-AUTO-WindowsLocalAdmin Write-Verbose -Message '1' inlinescript { # 通过$Using:前缀引用Workflow层面的变量 $Credential2 = $Using:Credential1 $VerbosePreference = 'Continue' Write-Verbose -Message '2' Write-Verbose -Message '3' # 正常显示无压力 } }
内容的提问来源于stack exchange,提问作者Felix Bodmer
相关产品推荐
相关产品推荐

