我想知道是否有更好的方法在PowerShell上制作这些说明的脚本:
搜索3条路径。实施例
$LOGDIRS="C:\NETiKA\GED\Production\RI\log";"C:\NETiKA\GED\Test\RI\log";"C:\NETiKA\Tomcat-8.0.28\logs"
查找超过7天的所有文件,并复制到我将调用file.list的文件中。 EX。 > C:\测试\的File.List
当我复制到我的file.list时,我需要搜索文件的所有名称并将其删除。
显然,当你有超过数千个文件时,就是这个 最快的删除方式。
$LOGDIRS=C:/NETiKA/GED/Production/RI/log;C:/NETiKA/GED/Test/RI/log;C:/NETiKA/Tomcat-8.0.28/logs
$KEEP=-7
Get-ChildItem -Path $LOGDIRS -Recurse -Directory -Force -ErrorAction SilentlyContinue |
Select-Object FullName > files.list |
Foreach-Object {
if ($_.LastAccessTime -le (get-date).adddays($KEEP)) {
remove-item -recurse -force $_
}
};
答案 0 :(得分:0)
这样的事情可以帮助你开始。
$path1 = "E:\Code\powershell\myPS\2018\Jun"
$path2 = "E:\Code\powershell\myPS\2018\Jun\compareTextFiles"
$path3 = "E:\Code\powershell\myPS\2018\May"
$allFiles = dir $path1, $path2, $path3 -File
$fileList = New-Item -type file file.list -Force
$keep = -7
$allFiles | foreach {
if ($_.LastAccessTime -le (Get-Date).AddDays($keep)) {
"$($_.FullName) is older than 7 days"
$_.FullName.ToString() | Out-File $fileList -Append
}
else {
"$($_.FullName) is new"
}
}
如果您愿意,可以在IF Block
的代码中添加删除,或者检查文件,稍后再进行操作。您的代码有许多对PowerShell来说非常基本的问题,例如:一旦使用Select-Object
,下一个管道将只接收您选择的属性。当您选择继续使用FullName属性时,您已尝试在以后的管道中使用LastAccessTime。
此外,重定向到文件并再次使用管道看起来非常混乱。
答案 1 :(得分:0)
-WhatIf
添加到Remove-Item
$LOGDIRS="C:\NETiKA\GED\Production\RI\log","C:\NETiKA\GED\Test\RI\log","C:\NETiKA\Tomcat-8.0.28\logs"
$KEEP=-7
Get-ChildItem -Path $LOGDIRS -Recurse -Directory -Force -ErrorAction SilentlyContinue |
Where-Object LastAccessTime -le ((get-date).AddDays($KEEP))
Remove-Item -Recurse -Force $_ -Whatif