Error handling Powershell错误输出抑制(再次)

Error handling Powershell错误输出抑制(再次),error-handling,azure-powershell,Error Handling,Azure Powershell,我知道这个问题以前已经被问过不止一次了,因为我已经搜索并阅读了所有的问题 尽管如此,我正在与一个特别顽固的powershell错误作斗争,这个错误似乎不会让我抑制向屏幕输出大量红色。我正在做一个简单的连接到AzureAD模块的单内衬 Connect-AzureAD -Credential $Credential 请注意,我在许多不同客户的Azure租户中工作,有些执行2FA,有些不执行。我正在编写一系列帮助函数,以缓解不同租户多次登录和注销的日常工作。。。 我知道,当尝试连接到2FA强制租户时

我知道这个问题以前已经被问过不止一次了,因为我已经搜索并阅读了所有的问题

尽管如此,我正在与一个特别顽固的powershell错误作斗争,这个错误似乎不会让我抑制向屏幕输出大量红色。我正在做一个简单的连接到AzureAD模块的单内衬

Connect-AzureAD -Credential $Credential
请注意,我在许多不同客户的Azure租户中工作,有些执行2FA,有些不执行。我正在编写一系列帮助函数,以缓解不同租户多次登录和注销的日常工作。。。 我知道,当尝试连接到2FA强制租户时,cmdlet将失败。。。我期待它,我想(默默地)捕获它并自己处理这个错误。大部分我都能做到,但其中的“无声”部分特别麻烦。我已经尝试了我所知道的所有可能的抑制输出的方法(主要是从这里的其他文章中)。 在没有采取任何对策的情况下,该cmdlet会生成6(六!)个错误事件,所有这些事件都会显示在屏幕上。使用我能想到的任何一种抑制方法,我都可以抑制其中的5种,但无论我尝试什么,屏幕上总会出现一个错误。。。我试过:

Connect-AzureAD -Credential $Credential *> .errors.txt
Connect-AzureAD -Credential $Credential *>&1 > .errors.txt
Connect-AzureAD -Credential $Credential *>&1 | out-null
Connect-AzureAD -Credential $Credential 2>&1 | out-null
Connect-AzureAD -Credential $Credential *>$null
$void=Connect-AzureAD -Credential $Credential -ErrorAction silentlycontinue
$void=Connect-AzureAD -Credential $Credential
Connect-AzureAD -Credential $Credential >$null
Connect-AzureAD -Credential $Credential|out-null
[void](Connect-AzureAD -Credential $Credential)
到目前为止,完全没有任何东西可以完全抑制所有的错误输出,-我总是得到最后1个错误破坏了我整洁的屏幕输出

我还检查了Connect-AzureAD cmdlet是否有任何选项,如-quiet或-silent等-它没有

仅供参考,引发的实际错误为:

Connect-AzureAD : One or more errors occurred.: AADSTS50076: Due to a configuration change made by 
your administrator, or because you moved to a new location, you
must use multi-factor authentication to access '00000002-0000-0000-c000-000000000000'.
Trace ID: 73e00fc9-6e7b-4210-8aa6-285b04692800
Correlation ID: 1b9e2d49-1ed6-4f1e-8ce9-65761a15edd9
Timestamp: 2020-02-14 16:12:10Z
At line:1 char:1
+ Connect-AzureAD -Credential $Credential *> .errors.txt
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Connect-AzureAD], AadAuthenticationFailedException
    + FullyQualifiedErrorId : Microsoft.Open.Azure.AD.CommonLibrary.AadAuthenticationFailedException,Microsoft.Open.Azure.AD.CommonLibrary.ConnectAzureAD
有没有人对核力量选项有什么想法,可以完全抑制所有错误的输出?我的catch块确实可以捕获名为exception的
[Microsoft.Open.Azure.AD.CommonLibrary.AadAuthenticationFailedException]
,因此我可以很好地处理错误,但我真的不想让红色错误文本“破坏”我的输出

蒂亚


Paul G.

我倾向于用try{}catch{}包装大多数AzureAD代码。快速测试似乎对您的案例有效:

try {
    Connect-AzureAD -ErrorAction Stop
} catch {
    Write-Error -Message "Login cancelled or something..."
}
希望你觉得这个有用