PowerShell - 捕获错误不导出到 Out-File
PowerShell - Catching Error not exporting to Out-File
我有一个脚本可以列出远程机器上的权限。 try{} 完美无误地工作,这很好。然而,catch{} 却没有。脚本块如下:
Try{
$group = get-wmiobject win32_group -ComputerName $CompName -Filter "LocalAccount=True AND SID='S-1-5-32-544'"
$query = "GroupComponent = `"Win32_Group.Domain='$($group.domain)'`,Name='$($group.name)'`""
$list = Get-WmiObject win32_groupuser -ComputerName $CompName -Filter $query
$list | %{$_.PartComponent} | % {$_.substring($_.lastindexof("Domain=") + 7).replace("`",Name=`"","\")}-ErrorAction Stop| Out-File C:\AdminList$CompName\AdminListResults$CompName.txt
Write-Host "Sequence Completed. Logs have been exported to $CompName folder." -ForegroundColor Cyan
}
catch{
$Error[0]| Out-File C:\AdminList$CompName\ErrorLogs$CompName.txt
Write-Host "Errors Found. See ErrorLogs for details" -ForegroundColor Yellow
}
我希望它做的是,如果 try{} 失败,它会捕获显示的错误,将其从控制台隐藏并将其导出到指定的位置,但这是不起作用的部分。当前发生的是 try{} 运行,错误显示在控制台中,并且出现 try{} 的写入主机,而不是 catch{} 写入主机。
任何建议都很好。我浏览 Stack 寻找答案,但找不到任何答案。我的最后一个问题已经结束,因为它太宽泛了,所以我希望这个问题有更多细节以便更好地理解。
谢谢!
您可能 运行 陷入非终止错误。这些类型的错误不会引发异常,但您可以手动执行。要验证,请将 -ErrorAction SilentlyContinue 附加到您的两个 Get-WmiObject 调用。如果没有报错,就是这种情况。为了捕获那些静止图像,您可以使用 -ErrorVariable 参数,然后将其放入文件中。
try
{
Get-WmiObject -Class whatever -ErrorVariable err -ErrorAction SilentlyContinue
if ($err)
{
throw $err
}
}
catch
{
## whatever you want to do here
}
我有一个脚本可以列出远程机器上的权限。 try{} 完美无误地工作,这很好。然而,catch{} 却没有。脚本块如下:
Try{
$group = get-wmiobject win32_group -ComputerName $CompName -Filter "LocalAccount=True AND SID='S-1-5-32-544'"
$query = "GroupComponent = `"Win32_Group.Domain='$($group.domain)'`,Name='$($group.name)'`""
$list = Get-WmiObject win32_groupuser -ComputerName $CompName -Filter $query
$list | %{$_.PartComponent} | % {$_.substring($_.lastindexof("Domain=") + 7).replace("`",Name=`"","\")}-ErrorAction Stop| Out-File C:\AdminList$CompName\AdminListResults$CompName.txt
Write-Host "Sequence Completed. Logs have been exported to $CompName folder." -ForegroundColor Cyan
}
catch{
$Error[0]| Out-File C:\AdminList$CompName\ErrorLogs$CompName.txt
Write-Host "Errors Found. See ErrorLogs for details" -ForegroundColor Yellow
}
我希望它做的是,如果 try{} 失败,它会捕获显示的错误,将其从控制台隐藏并将其导出到指定的位置,但这是不起作用的部分。当前发生的是 try{} 运行,错误显示在控制台中,并且出现 try{} 的写入主机,而不是 catch{} 写入主机。
任何建议都很好。我浏览 Stack 寻找答案,但找不到任何答案。我的最后一个问题已经结束,因为它太宽泛了,所以我希望这个问题有更多细节以便更好地理解。
谢谢!
您可能 运行 陷入非终止错误。这些类型的错误不会引发异常,但您可以手动执行。要验证,请将 -ErrorAction SilentlyContinue 附加到您的两个 Get-WmiObject 调用。如果没有报错,就是这种情况。为了捕获那些静止图像,您可以使用 -ErrorVariable 参数,然后将其放入文件中。
try
{
Get-WmiObject -Class whatever -ErrorVariable err -ErrorAction SilentlyContinue
if ($err)
{
throw $err
}
}
catch
{
## whatever you want to do here
}