我在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.")}
答案 0 :(得分:1)
这可能是因为您正在复制文件和目录。 $files
变量包含目录和文件结果。如果要过滤掉目录,并将文件作为单个项目复制,请过滤掉目录结果。
当您在Copy-Item
循环内调用foreach
时,如果它将-Path
绑定到目录,那么单Copy-Item
命令将包含整个目录结构的文件。这就是为什么你没有按文件获取状态的原因。
$files = gci $path -recurse | ? { -not $_.PSIsContainer; };