复制文件时如何将错误输出到PowerShell中的日志文件

时间:2013-11-04 21:45:59

标签: windows powershell

我正在尝试编写执行以下操作的powershell脚本:

  1. 检查远程计算机上的文件夹(计算机文本列表)是否存在,如果存在,请将其删除。
  2. 将文件夹从远程共享复制到同一台计算机,如果错误输出到错误日志文件,如果没有,则输出到成功日志文件。
  3. 我已搜索但无法找到解决我看似简单问题的方法,请参阅下面的代码:

    $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中的错误?

2 个答案:

答案 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