当前位置: 首页 > 知识库问答 >
问题:

如何评估PowerShell中是否返回数据或错误?

华良平
2023-03-14

我正在尝试使用以下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是否有实际数据。

非常感谢!

共有2个答案

余靖
2023-03-14

你可以试着把它包起来..接住:

try {
    Get-DNSServerZone abc.com -ErrorAction Stop
}
catch {
    Write-Warning "zone abc.com doesn't exist"
}

或者走另一条路,忽略错误:

$a = Get-DNSServerZone abc.com -ErrorAction SilentlyContinue
if (!$a) {
    Write-Warning "abc.com doesn't exist"
}
沃弘图
2023-03-14

我现在需要做的是,根据是否有错误或是否有数据返回,将它转换为真/假评估。

如果您可以简单地忽略失败,并且不需要Get DNSServerZone返回的对象,则可以执行以下操作:

$zoneExist = [bool] (Get-DNSServerZone abc.com -ErrorAction Ignore)

> < Li > < p > < code >-error action Ignore 悄悄忽略任何(非终止)错误。

> < li>

将< code>Ignore传递给公共的< code>-ErrorAction参数只是丢弃错误,而< code>SilentlyContinue虽然也不输出错误,但仍将其记录在自动的< code>$Error集合中,以便以后检查。

您还可以使用类似于< br > < code >-error variable err 的内容来补充< code >-error action silently continue ,这将通过公共的< code>-ErrorVariable参数在自选变量< code>$err中额外记录特定于命令的错误。

Cast[bool]映射Get-DNSServerZone的输出到$true(输出描述该区域的对象)或$false(没有输出(到成功输出流),因为发生了错误),利用了PowerShell的隐式到布尔转换。

如果还需要区域描述对象:

$zoneExist = [bool] ($zoneInfo = Get-DNSServerZone abc.com -ErrorAction Ignore)

另一种方法是首先捕获区域信息,然后查询自动 $? 变量,该变量包含一个布尔值($true$false),指示最近执行的语句是否导致了任何错误(无论是否被抑制)。

$zoneInfo = Get-DNSServerZone abc.com -ErrorAction Ignore
$zoneExist = $?
 类似资料:
  • 问题内容: 如果我有以下代码: 请问或会首先评估? 问题答案: 首先评估索引。请参阅JLS第15.26.1节,尤其是: 15.26.1。 简单赋值运算符= … 如果左侧操作数是数组访问表达式(第15.13节),可能包含在一对或多对括号中,则: 1. 首先,评估左侧操作数数组访问表达式的数组引用子表达式。如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;(左操作数数组访问表达式的)索引子表达

  • Hubble的计算指标分为活跃性的人均次数指标,提高转化的转化率值指标,效果类的总值型指标。本节将会以效果类的总值型指标作为主要依据,来对实验数据进行解读。 1.1. 关于A/B测试你需要知道的几个概念: 关于A/B测试的科学性 A/B测试本质上是小流量测试,最早应用于药品的测试。自从2000年谷歌工程师开始运用到互联网行业,AB测试已经成为最流行的增长利器。 A/B测试数据的效果评估依赖于统计上

  • 问题内容: 我知道Java在这种情况下具有智能/惰性评估: 但是关于: 即使返回true 也被调用? 问题答案: 在Java(和其他类似C的语言)中,这称为 短路评估 。* 是的,在第二个示例中总是被调用。也就是说,除非编译器/ JVM可以确定它没有可观察到的副作用,否则在这种情况下它可以选择进行优化,但是无论如何您都不会注意到它们之间的差异。 两者截然不同; 前者本质上是一种优化技术,而第二种则

  • 问题内容: 以下内容在Python 3.6中从不打印任何内容 相反,它只是坐在那里烧坏了CPU。问题似乎在于,如果迭代器位于无限空间内,则永远不会返回迭代器,因为它首先评估完整的迭代器。鉴于假设应该是发电机,这令人惊讶。 我本来希望这会开始计数(到无穷大),就像这个生成器的行为(直接从docs取得): 但是,尽管我的生成器立即开始计数,但使用的生成器根本不计数。 其他工具可以达到我的期望。例如,以

  • 问题内容: 我想知道JavaScript是否具有C#中的&&运算符之类的“短路”评估。如果没有,我想知道是否有一种合理的解决方法可以采用。 问题答案: 是的,JavaScript具有“短路”评估。

  • 问题内容: 给出以下代码: 如果返回,php解释器是否还会检查以后的条件,例如? 如果是这样,那么为什么它在不需要时会做额外的工作呢? 问题答案: 是的,PHP解释器是“惰性”的,这意味着它将尽可能少地进行比较以评估条件。 如果要验证,请尝试以下操作: