Powershell删除任务中的进度条登录

Powershell删除任务中的进度条登录,powershell,loops,logic,progress-bar,Powershell,Loops,Logic,Progress Bar,大家下午好, 我不熟悉PS中的进度条显示。但在查看文档和几个论坛后,我最终得到了下面的脚本。这根本没用。它不会删除文件夹/子文件夹,也不会显示进度条,也不会出错。我的逻辑是断章取义的还是有更好的方法将进度条与相关任务嵌套在一起 $computerlist = get-content -path c:\scripts\Computerlist-test.txt $FolderPath = "c$\IT\9.0.0" $Path = "\\$computer\$FolderPath" foreac

大家下午好, 我不熟悉PS中的进度条显示。但在查看文档和几个论坛后,我最终得到了下面的脚本。这根本没用。它不会删除文件夹/子文件夹,也不会显示进度条,也不会出错。我的逻辑是断章取义的还是有更好的方法将进度条与相关任务嵌套在一起

$computerlist = get-content -path c:\scripts\Computerlist-test.txt
$FolderPath = "c$\IT\9.0.0"
$Path = "\\$computer\$FolderPath"

foreach ($computer in $computerlist) {
for ($i = 1; $i -lt $ListOfFiles.count; $i++) { 
    Write-Progress -Activity 'Deleting Folders/Files...' -Status $ListOfFiles[$i].FullName -PercentComplete ($i / ($ListOfFiles.Count*100))
        Remove-Item -path $Path -Recurse -WhatIf
        $ListOfFiles = Get-ChildItem -Path $Path -Recurse | Where-Object {!$_.PSIsContainer}
 }
}

“删除项”部分在没有任务栏的第二个“I”循环的情况下工作,因此我假设这是不合逻辑的。

“循环次数与ListOfFiles中的文件次数相同”->脚本启动时ListOfFiles中没有文件->它从不循环->它不填充ListOfFiles->脚本什么都不做。即使它确实工作,您的
Remove Item
正在尝试删除整个路径,因此如果它有100个项目,您将删除整个路径一次,并使用误导性的进度条,等待很长时间,然后抛出99个“path not found”错误。就我个人而言,我宁愿让远程计算机执行删除操作,而不是通过(较慢的)网络链接执行文件操作。如果您有PS Remoting,那么在一个命令中执行所有计算机->
invoke命令-computername$computerList-ScriptBlock{remove item c:\it\9.0.0}
,然后它将并行执行所有这些操作,并将工作保持在计算机本地,这总体上会快得多。除此之外,很难获得有用的进度条。@TessellingHeckler不幸的是,由于特定的公司,这是一个非常安全的环境。PS远程处理和WMR服务已禁用。你能想出一个显示进度条的方法吗?如果不是的话,我可以盲目地运行它,但是对于服务器的数量来说,有一个进度估计会非常有帮助。谢谢你的第一篇文章。有道理。不确定你会对“我们禁用更新的、更可审核的、更细粒度的协议,需要更少的端口,而是拥有完全开放的管理共享、RPC、SMB端口,因为安全性”达成多大的一致,但无论如何。这取决于你想要什么-如果没有太多的文件,进度条会走得太快,没有太多的意义,如果有太多的文件,获得他们的名单将需要很长时间,这将是烦人的等待。如果有足够的服务器,我会尝试根据完成的服务器的百分比来做进度条;它总是同一个文件夹,里面有相同的文件数吗?