将Rename-Item事件输出到日志文件

时间:2016-03-01 22:42:29

标签: powershell file-io powershell-v2.0

我尝试使用以下脚本记录围绕文件重命名的数据。唯一的问题是日志文件包含由于“拒绝访问”而未重命名的文件。尝试重命名时出错。我需要弄清楚如何只为SUCCESSFULLY重命名的文件创建日志条目,或者将失败的重命名管道传输到不同的日志文件。如果可能的话,我也希望重命名的文件总数列在日志文件的顶部(即' xxx文件已重命名')我感谢任何使用PowerShell使其工作的建议V2。

    $drivesArray = Get-PSDrive -PSProvider 'FileSystem' | select -Expand Root 
foreach ($drive in $drivesArray) {
  Get-ChildItem $drive | Where-Object {
    $_.FullName -notlike "${Env:WinDir}*" -and
    $_.FullName -notlike "${Env:ProgramFiles}*"
  } | ForEach-Object {
    Get-ChildItem $_.FullName -Recurse -ErrorAction SilentlyContinue
  } | Where-Object {
    -not $_.PSIsContainer -and
    $_.Extension -notmatch '^\.(xxx|exe|html)$'
  } | ForEach-Object {
    $newName = $_.FullName + '.xxx';
    Rename-Item -Path $_.FullName -NewName  ($_.FullName + '.xxx')  -ErrorAction SilentlyContinue
    Add-Content c:\temp\renameLog.txt -Value $('{0} {1} {2} {3}' -f $(Get-Date),$_.fullname,$_.name,$newName )   
  }
}

1 个答案:

答案 0 :(得分:0)

这是一个例子,当然未经测试。

$success = 0
$failed = 0

$drivesArray = Get-PSDrive -PSProvider 'FileSystem' | select -Expand Root 

foreach ($drive in $drivesArray) {
  Get-ChildItem $drive | Where-Object {
  $_.FullName -notlike "${Env:WinDir}*" -and
  $_.FullName -notlike "${Env:ProgramFiles}*"
  } | ForEach-Object {
Get-ChildItem $_.FullName -Recurse -ErrorAction SilentlyContinue
  } | Where-Object {
-not $_.PSIsContainer -and $_.Extension -notmatch '^\.(xxx|exe|html)$' -and $_.Name -notmatch '^renameLog.txt|^renameLog_failed.txt'
  } | ForEach-Object {
    try {
    $newName = $_.FullName + '.xxx';
    Rename-Item -Path $_.FullName -NewName  ($_.FullName + '.xxx')  -ErrorAction Stop 
    Add-Content c:\temp\renameLog.txt -Value $('{0} {1} {2} {3}' -f $(Get-Date),$_.fullname,$_.name,$newName ) 
    $success ++  
    } catch [exception] {
        Add-Content c:\temp\renameLog_failed.txt -Value $('{0} {1} {2} {3}' -f $(Get-Date),$_.fullname,$_.name,$newName )   
        $failed ++
        $error.Clear()
    }
  }
}

 Add-Content "c:\temp\renameLog.txt" -Value $("Total: " + $success)
 Add-Content "c:\temp\renameLog_failed.txt" -Value $("Total: " + $failed)