Powershell Write-Progress栏不能处理大文件

时间:2014-02-14 17:43:44

标签: powershell

我在Powershell v.1.0中遇到了write-progress命令的问题。当我在Powershell ISE中包含几百个文件的测试目录上运行此脚本时,进度条按照公布的方式工作,并递归显示其中所有文件的名称。当我在公司域上使用用户主目录运行它时,进度条根本不移动,$ files.name只显示文件夹内的顶级目录名称,如“Desktop”,“AppData”等。任何想法为什么会出现这种情况?在此先感谢您的帮助!

$path = "\\company\shares\campus\HomeDir\username"    
$dest = "R:\Terminated"    
$counter = 0    
$files = gci $path -recurse            
Foreach($file in $files)
         {
          Copy-Item $path $dest -recurse -force
          Write-Progress -Activity "Backing Up Terminated User HomeDir:" -status $file.name -PercentComplete ($counter / $files.count*100) 
          $counter++           
          }

         If ($Counter = $files.Count)
          {[System.Windows.Forms.MessageBox]::Show("Backup Complete.")} 
         Else 
          {[System.Windows.Forms.MessageBox]::Show("File Backup Did Not Finish.")} 

1 个答案:

答案 0 :(得分:1)

这可能是因为您正在复制文件和目录。 $files变量包含目录和文件结果。如果要过滤掉目录,并将文件作为单个项目复制,请过滤掉目录结果。

当您在Copy-Item循环内调用foreach时,如果它将-Path绑定到目录,那么单Copy-Item命令将包含整个目录结构的文件。这就是为什么你没有按文件获取状态的原因。

$files = gci $path -recurse | ? { -not $_.PSIsContainer; };