首页 > 解决方案 > Powershell错误输出抑制(再次)

问题描述

我知道这已经被问过不止一次了——因为我已经搜索并阅读了所有这些!..

尽管如此,我正在与一个特别顽固的 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)

到目前为止,绝对没有任何方法可以完全抑制所有错误输出, - 我总是得到最后一个错误,破坏了我整洁的屏幕输出。

我还检查了 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 块确实可以捕获[Microsoft.Open.Azure.AD.CommonLibrary.AadAuthenticationFailedException]命名的异常,所以我可以很好地处理错误,但我真的不想让红色错误文本“破坏”我的输出。

蒂亚!

保罗·G。

标签: error-handlingazure-powershell

解决方案


我倾向于使用 try{}catch{} 封装大多数 AzureAD 代码。快速测试似乎适用于您的情况:

try {
    Connect-AzureAD -ErrorAction Stop
} catch {
    Write-Error -Message "Login cancelled or something..."
}

希望您觉得这个有帮助。


推荐阅读