我有一个Powershell脚本,它将删除至少X天的文件。我想知道在删除文件之前如何更改它以打印文件。脚本是
$limit = (Get-Date).AddDays(-45)
$path = "\\noc2-storage\IT_Backup\Daily_SQL\" #"
# Delete files older than the $limit.
echo "Deleting files: "
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
# Delete any empty directories left behind after deleting the old files.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
答案 0 :(得分:2)
最简单的方法 - 以及通常适用的方法 - 是使用-Verbose
common parameter :
Write-Verbose -Verbose "Deleting files:"
Get-ChildItem -Path $path -Recurse -Force |
Where-Object { ! $_.PSIsContainer -and $_.CreationTime -lt $limit } |
Remove-Item -Force -Verbose
请注意,在PSv3 +中,您可以通过-Files
开关使用Get-ChildItem
来简化此操作,这会直接将输出限制为仅限文件,从而可以简化Where-Object
调用所谓的比较声明:
Write-Verbose -Verbose "Deleting files:"
Get-ChildItem -File -Path $path -Recurse -Force |
Where-Object CreationTime -lt $limit |
Remove-Item -Force -Verbose
如果仅想要回显将删除的内容 - 即执行干运行 - 请使用-WhatIf
常用参数 Remove-Item
,而不是-Verbose
。
另请注意,我已将echo "Deleting files: "
替换为Write-Verbose -Verbose "Deleting files:"
。
在PowerShell中,echo
是Write-Output
的别名,它写入成功流,这是输出数据的意思走。
实际上,写入该流是默认操作,因此您的命令可以简化为:
"Deleting files: " # implicitly output the string to the success stream
也就是说,状态消息如上面的不属于成功流,并且使用 verbose 输出的单独流是一个选择。
Write-Verbose -Verbose
显式生成这样的详细输出,但通常的机制是让函数/ cmdlet的-Verbose
公共参数或$VerbosePreference
首选项变量驱动是否应该详细输出是否显示。
答案 1 :(得分:0)
为此 - 你可以很容易地修改你已经拥有的命令。
$limit = (Get-Date).AddDays(-45)
$path = "\\noc2-storage\IT_Backup\Daily_SQL\"
# Delete files older than the $limit.
$files = Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit }
ForEach ($file in $files) {
Write-Verbose -Verbose "Deleting: $file"
Remove-Item -force $file
}
# Delete any empty directories left behind after deleting the old files.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
答案 2 :(得分:0)
假设您要打印文件名而不想打印文件内容:
您是否尝试将-verbose
传递给Remove-Item
?