我正在尝试编写执行以下操作的powershell脚本:
我已搜索但无法找到解决我看似简单问题的方法,请参阅下面的代码:
$computers=Get-Content C:\pcs.txt
$source="\\RemoteShare\RemoteFolder"
$dest="C$\Program Files\Destination"
foreach ($computer in $computers) {
If (Test-Path \\$computer\$dest){
Remove-Item \\$computer\$dest -Force -Recurse
}
Copy-Item $source \\$computer\$dest -recurse -force -erroraction silentlycontinue
If (!$error)
{Write-Output $computer | out-file -append -filepath "C:\logs\success.log"}
Else
{Write-Output $computer | out-file -append -filepath "C:\logs\failed.log"}
}
目前,当脚本运行时,无论是否失败,都会将所有内容放入failed.log文件中。
如何在运行for循环时正确处理PowerShell中的错误?
答案 0 :(得分:5)
这是一个例子。
$array = @(3,0,1,2)
foreach ($item in $array)
{
try
{
1/$item | Out-Null
Write-Host "$item is okay"
}
catch
{
Write-Host "There was an error! Can't divide by $item!"
}
}
答案 1 :(得分:4)
不要使用$error
,它总是包含一组最近的错误对象,即使最后一个命令成功也是如此。要检查最后一个命令的结果,请使用$?
,如果最后一个命令失败则为false。
有关这些变量的详细信息,请参阅about_Automatic_Variables。