powershell - 如何评估 PowerShell 中是否返回数据或错误?
问题描述
我正在尝试使用以下 cmdlet 测试 Powershell 中是否存在 DNS 区域:
Get-DNSServerZone abc.com
这很好用,但我现在需要做的是根据是否存在错误或是否返回数据将其转换为真/假评估。
例如,这是一个真实的场景:
$a = Get-DnsServerZone abc.com
$a
ZoneName ZoneType IsAutoCreated IsDsIntegrated IsReverseLookupZone IsSigned
-------- -------- ------------- -------------- ------------------- --------
abc.com Secondary False False False
而这是一个错误的场景:
$a = Get-DnsServerZone def.com
Get-DnsServerZone : The zone def.com was not found on server DNSSERVER1.
At line:1 char:6
+ $a = Get-DnsServerZone def.com
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (def.com:root/Microsoft/...S_DnsServerZone) [Get-DnsServerZone], CimException
+ FullyQualifiedErrorId : WIN32 9601,Get-DnsServerZone
我正在苦苦挣扎的是如何对此进行评估?用外行的话来说,我需要检查是否$a
有实际数据。
非常感谢!
解决方案
我现在需要做的是根据是否有错误或是否返回数据将其转换为真/假评估。
如果您可以简单地忽略失败并且不需要返回的对象Get-DNSServerZone
,则可以执行以下操作:
$zoneExist = [bool] (Get-DNSServerZone abc.com -ErrorAction Ignore)
-ErrorAction Ignore
悄悄地忽略任何(非终止)错误。传递
Ignore
给公共-ErrorAction
参数) 只是丢弃错误,而SilentlyContinue
,虽然也没有输出错误,但仍将其记录在自动$Error
收集中,以便以后检查。您还可以通过common参数
-ErrorAction SilentlyContinue
补充类似的东西
-ErrorVariable err
,这将另外记录自选变量中的命令特定错误。$err
-ErrorVariable
利用PowerShell的隐式到布尔转换
[bool]
,将映射Get-DNSServerZone
的输出转换为$true
(输出描述区域的对象)或$false
(没有输出(到成功输出流),因为发生了错误)。
如果您也想要区域描述对象:
$zoneExist = [bool] ($zoneInfo = Get-DNSServerZone abc.com -ErrorAction Ignore)
另一种方法是首先捕获区域信息,然后查询自动$?
变量,该变量包含一个布尔值($true
或$false
),指示最近执行的语句是否导致任何错误(无论是否被抑制)。
$zoneInfo = Get-DNSServerZone abc.com -ErrorAction Ignore
$zoneExist = $?
推荐阅读
- database - 如何将数据插入 SQL 数据库?
- c - c 中用空格分隔的 2 个字符串的输入
- google-sheets - 谷歌表格中的简单甘特图,具有月到月的范围
- javascript - 如何 module.exports 另一个模块?
- python - 具有多项式特征的梯度下降实现问题
- javascript - 如何将现有表包含到导出函数中?
- html - 在我的网站上放低一点的文字
- java - JavaFX逐像素写入bmp图像
- flutter - 使用 showMenu() 时如何处理 PopupMeniItem 按下
- android - 如何知道键盘何时会在 Kotlin 中使用 SearchView 隐藏?