如何显示Powershell脚本中的错误代码?
我正在尝试运行Powershell脚本,如果失败,则显示错误代码和错误消息。它应该以以下格式向我输出一个结果:如何显示Powershell脚本中的错误代码?,powershell,Powershell,我正在尝试运行Powershell脚本,如果失败,则显示错误代码和错误消息。它应该以以下格式向我输出一个结果: "FAILED;ErrorCode;ErrorMessage;" 这是我的剧本: param([String]$Cab_Type) $output if(!(Test-Connection -Cn 165.100.10.10 -BufferSize 16 -Count 1 -quiet)) { $output = "FAILED; " + $LASTEXITCODE + ";" +
"FAILED;ErrorCode;ErrorMessage;"
这是我的剧本:
param([String]$Cab_Type)
$output
if(!(Test-Connection -Cn 165.100.10.10 -BufferSize 16 -Count 1 -quiet))
{
$output = "FAILED; " + $LASTEXITCODE + ";" + $error[0] + ";"
}
else
{
$output = "PASSED"
}
Write-Host $Cab_Type
Write-Host "<ScriptResult_Start>"
Write-Host $output
Write-Host "<ScriptResult_End>"
param([String]$Cab\u类型)
$output
if(!(测试连接-Cn 165.100.10.10-缓冲区大小16-计数1-安静))
{
$output=“FAILED;”“+$LASTEXITCODE+”;“+$error[0]+”;”
}
其他的
{
$output=“已通过”
}
写入主机$Cab_类型
写入主机“”
写入主机$output
写入主机“”
我正试图故意为一个我知道会失败的地址设置ping。
运行脚本时,它会返回错误消息,但不会返回错误代码
$LASTEXITCODE是否不返回脚本的错误代码?即使我的脚本有效,它是否只返回0或1?有没有办法获取脚本的实际错误代码?有多种方法来处理错误和验证脚本。首先也是最重要的一点,我希望您将主代码保存在
try/catch
块下,并捕获错误消息,以便了解错误的确切含义。下面是对代码的修改
param([String]$Cab_Type)
$output
try
{
if(!(Test-Connection -Cn 165.100.10.10 -BufferSize 16 -Count 1 -quiet))
{
$output = "FAILED; " + $LASTEXITCODE + ";" + $error[0] + ";"
}
else
{
$output = "PASSED"
}
Write-Host $Cab_Type
Write-Host "<ScriptResult_Start>"
Write-Host $output
Write-Host "<ScriptResult_End>"
}
catch
{
$_.Exception.Message
}
param([String]$Cab\u类型)
$output
尝试
{
if(!(测试连接-Cn 165.100.10.10-缓冲区大小16-计数1-安静))
{
$output=“FAILED;”“+$LASTEXITCODE+”;“+$error[0]+”;”
}
其他的
{
$output=“已通过”
}
写入主机$Cab_类型
写入主机“”
写入主机$output
写入主机“”
}
抓住
{
$\异常.Message
}
另外,通过大约1
除此之外,您还可以使用$Error
变量了解所有错误
通过2
你还需要理解3
希望它能帮助你并给你一个方向。也许这就是你想要的
# set up a hash with possible Ping status codes
$status = @{
11001 = 'Buffer Too Small'
11002 = 'Destination Net Unreachable'
11003 = 'Destination Host Unreachable'
11004 = 'Destination Protocol Unreachable'
11005 = 'Destination Port Unreachable'
11006 = 'No Resources'
11007 = 'Bad Option'
11008 = 'Hardware Error'
11009 = 'Packet Too Big'
11010 = 'Request Timed Out'
11011 = 'Bad Request'
11012 = 'Bad Route'
11013 = 'TimeToLive Expired Transit'
11014 = 'TimeToLive Expired Reassembly'
11015 = 'Parameter Problem'
11016 = 'Source Quench'
11017 = 'Option Too Big'
11018 = 'Bad Destination'
11032 = 'Negotiating IPSEC'
11050 = 'General Failure'
}
$server = '165.100.10.10'
$ping = (Get-WmiObject -Class Win32_PingStatus -Filter "Address='$server'").StatusCode
if (!$ping -or [int]$ping -ne 0) {
$err = if ( $status[[int]$ping]) { $status[[int]$ping] } else { "Unknown Failure" }
$output = "FAILED; $ping; $err"
}
else { $output = "PASSED" }
Write-Host $output
上述示例输出:
非常感谢。作为Powershell的初学者,我并不真正理解您分配给$ping的代码行。你介意进一步解释你的代码或者让我参考其他能帮助我理解的资料吗?我还试图获取返回错误代码和消息的同一种脚本,但使用了其他命令,如get NetAdapter。@Komputer
get WmiObject-Class Win32_PingStatus-Filter“Address='$server''
对指定的服务器名或IP地址执行ping操作后,返回具有多个属性的对象。命令“捕获”这个对象周围的括号,由于我们只对属性StatusCode
感兴趣,我们可以简单地使用“点”语法来获取单个属性。它实际上是Get wmioobject-Class Win32\u PingStatus-Filter“Address='lambiek'”| Select Object-ExpandProperty StatusCode
的简写代码。要查看对象的属性和方法,请通过管道将其传递到Get Member
。
FAILED; 11010; Request Timed Out