你可以用这个做很多事情。让我先告诉你你在找什么:
因此,让我们说你有一个错误,为了捕捉你应该使用try/catch。
更换:
Get-Content "\\$server\c$\file.log" | Select-String "Error" -quiet | Select-Object $server
随着这:
try
{
Get-Content "\\$server\c$\file.log" | Select-String "Error" -quiet | Select-Object $server
}
catch
{
$Error >> ErrorFile.txt
}
第二件事,我建议是。假设你有10台电脑,并假设第8台电脑有一些错误。但是你仍然不希望停止循环,并继续循环的其余计算机。在这种情况下,你应该使用2 try/catch语句是这样的:
$computernames = Get-Content C:\PC.txt
try
{
foreach ($server in $computernames)
{
$filepath = Test-Path "\\$server\c$\"
try{
if ($filepath -eq "True") {
try
{
Get-Content "\\$server\c$\file.log" | Select-String "Error" -quiet | Select-Object $server
}
catch
{
$Error >> ErrorFile.txt
}
}
}
catch
{
$_.Exception.Message >> Errorfile.txt
}
}
}
catch
{
$_.Exception.Message >> Errorfile.txt
}
所以方法是,如果在foreach内的任何错误,那么内部catch块将捕捉它和错误信息会被解析到errorfile.txt保持循环运行并将继续处理其余的计算机。
如果有一些问题与主$ computernames同时获得该文件的内容,那么它会到主catch块与分析,并附加在errorfile.txt
希望它相应的错误信息帮助您了解try/catch的有效性
*期望的结果是什么?你对错误信息感兴趣吗?或者只是计算机名称? – vonPryz
目前只有电脑的名字。解释整个事情。 此日志文件与服务相关,只能生成2个错误,这些错误可以通过修复或通过重新启动第一种情况的服务,或通过删除第二种情况的数据库中的重复项来实现。 目前的想法是让计算机出现错误,然后尝试改进以自动执行解决方案,因此如果错误500 - >重新启动服务,如果ducplicate提取GUID并从数据库中删除。 但我正在一点一点的采取:) – Blodka