如何在PowerShell脚本中将打印添加到控制台?

时间:2016-11-14 17:53:27

标签: powershell

我是PowerShell的新手,我创建了以下代码来删除特定的文件和文件夹:

$myFolderPath = "C:\Test"
$myLimit = (Get-Date).AddDays(-14)

# Delete files according to filter.
Get-ChildItem -Path $myFolderPath -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $myLimit} | Remove-Item -Force

# Delete empty folders.
Get-ChildItem -Path $myFolderPath -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse

是否可以在执行实际的Remove-Item操作之前打印出将被删除到控制台的每个项目的完整路径?

我猜是的。必须在这里添加....

... | Remove-Item -Force

在这里......

... | Remove-Item -Force -Recurse

但我无法找到如何以优雅的方式实现它(没有代码重复)。

2 个答案:

答案 0 :(得分:0)

您可以使用

替换remove-Item - 部件
Foreach-Object { $_.fullname; Remove-Item -Path $_.Fullname (-Recurse) -Force}

LotPings评论可能更好,如果这是你想要的。

答案 1 :(得分:0)

它没有得到很多关注,但Tee-Object可能是这里管道的简单补充。将输出重定向到稍后可以打印的变量。

...Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $myLimit} |
    Tee-Object -Variable removed | Remove-Item -Force
$removed | Write-Host

管道传输的所有文件对象都将发送到$removed,然后发送到Remove-Item。由于您有多个删除管道,因此您还可以使用-Append参数,以便在需要时将所有文件保存在一个变量中。

然而,这并不意味着它们已被删除。只是他们让它通过管道。如果你真的想确定你应该使用另一个具有日志记录功能的robocopy实用程序。

相关问题