gpt4 book ai didi

powershell - Powershell中Try/Catch的错误处理问题

转载 作者:行者123 更新时间:2023-12-03 00:52:18 26 4
gpt4 key购买 nike

作为我个人发展的一部分,我一直在研究Don Jones的一本Powershell书中的以下示例,并且在使try/catch构造正常工作方面遇到了一些严重的麻烦。如您所见,执行catch块时,它将设置一个名为$everything_ok的变量为$false-这将在以下代码中触发else块。它的作用-日志文件按照我的期望附加。

但是,当它尝试查询人造计算机“NOTONLINE”(异常类型为if)时,它也不会阻止脚本也执行System.Runtime.InteropServices.COMException块中的代码并喷出“RPC服务器不可用”错误。

使这个问题变得更加奇怪的是,我在脚本中使用了断点,并一路检查$everything_ok变量的内容,并且在任何时候都从未包含错误的值。那么,为什么当我指定的条件(if)没有得到满足时,if ($everything_ok = $true)块仍在为“NOTONLINE”执行吗?

我在这里做错什么了吗?

function get-systeminfo {
<#
.SYNOPSIS
Retrieves Key Information on 1-10 Computers
#>
[cmdletbinding()]
param (
[parameter(mandatory=$true,valuefrompipeline=$true,valuefrompipelinebypropertyname=$true,helpmessage="computer name or ip address")]
[validatecount(1,10)]
[validatenotnullorempty()]
[alias('hostname')]
[string[]]$computername,
[string]$errorlog = "C:\retry.txt",
[switch]$logerrors
)
BEGIN {
write-verbose "Error log will be $errorlog"
}
PROCESS {

foreach ($computer in $computername) {
try {$everything_ok = $true
gwmi win32_operatingsystem -computername $computer -ea stop
} catch {
$everything_ok = $false
write-verbose "$computer not Contactable"
}
if ($everything_ok = $true) {
write-verbose "Querying $computer"
$os = gwmi win32_operatingsystem -computername $computer
$cs = gwmi win32_computersystem -computername $computer
$bios = gwmi win32_bios -computername $computer
$props = @{'ComputerName' = $cs.__SERVER;
'OSVersion' = $os.version;
'SPVersion' = $os.servicepackmajorversion;
'BiosSerial' = $bios.serialnumber;
'Manufacturer' = $cs.manufacturer;
'Model' = $cs.model}
write-verbose "WMI Queries Complete"
$obj = new-object -type psobject -property $props
write-output $obj
}
elseif ($everything_ok = $false) {
if ($logerrors) {
"$computer $_" | out-file $errorlog -append
}
}
}
}
END {}
}

get-systeminfo -host localhost, NOTONLINE -verbose -logerrors

最佳答案

Powershell中的等号用作分配操作。 -eq用于测试是否相等。因此,您的if语句将$ true分配给$ everything_ok,然后测试true。

关于powershell - Powershell中Try/Catch的错误处理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20578266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com