write-verbose 和 write-progress 之间是否有东西可以表明脚本还没有死?

write-verbose 和 write-progress 之间是否有东西可以表明脚本还没有死?

我有一个可以递归删除文件和文件夹的脚本,它可以选择打开详细程度,但有时您不希望将数十万个文件名写入主机。

在这种情况下,每隔几秒它就会使用 -NoNewLine 将“x 条记录已删除”写入主机

我想也许这需要被包装成一个作业或者其他什么东西,但我真的不知道如何对本地脚本做到这一点,如果是远程的,我会使用invoke-command或者其他什么东西

以下是尾部递归删除内容的脚本

function RecurseFolderDelete {
        Write-Host "* is greedy wildcard"
        Write-Host "? is non greedy wildcard"
        $term= Read-Host -Prompt "enter search term to delete"
        Write-Host "all folders and files with the term '$term' in current directory will be deleted"
                $reply = Read-Host -Prompt "Continue?[y/n]"
if ( $reply -match "[yY]" ) { 
        $verbosity = Read-Host -Prompt "verbose? [y/n]"
if ( $verbosity -match "[yY]" ) { 
       
Get-ChildItem -Recurse -Filter "$term" -Directory | remove-item -Recurse -Verbose -Force
}
if ( $verbosity -match "[nN]" ) { 
       
Get-ChildItem -Recurse -Filter "$term" -Directory | remove-item -Recurse -Force
}
}
}


答案1

好的,在@spikey_richie 的帮助下,我找到了以下答案

添加

Where-Object { Write-Progress "Deleting  $($_.Fullname)"; $true }

并将 Get-ChildItem 的结果传输给它会产生一种工作方法,显示当前正在处理的文件夹,它可能需要改进,但这对我来说已经足够了。

如果将 remove-item 传送至 where-object,您将获得更频繁更新的进度条。

新脚本是这个

function RecurseFolderDelete {
        Write-Host "* is greedy wildcard"
        Write-Host "? is non greedy wildcard"
        $term= Read-Host -Prompt "enter search term to delete"
        Write-Host "all folders and files with the term '$term' in current directory will be deleted"
                $reply = Read-Host -Prompt "Continue?[y/n]"
if ( $reply -match "[yY]" ) { 
        $verbosity = Read-Host -Prompt "verbose? [y/n]"
if ( $verbosity -match "[yY]" ) { 
       
Get-ChildItem -Recurse -Filter "$term" -Directory | remove-item -Recurse -Verbose -Force
}
if ( $verbosity -match "[nN]" ) { 
       
Get-ChildItem -Recurse -Filter "$term" -Directory | Where-Object { Write-Progress "Deleting  $($_.Fullname)"; $true } | remove-item -Recurse -Force
}
}
}

如果有人想进一步完善这一点,提供一个提示,看看某个文件夹是否花了很长时间,或者提供其他一些方面,让它更干净一点,那就太好了,如果@spikey_richie 想把这个作为答案发布出来,我会删除这个,并接受他们的

相关内容