我有一个脚本,可以清理超过 x 天的文件和文件夹,但我必须让它更安全一些。如果有人创建了指向程序文件的链接,该位置的所有内容也会被删除。我如何保护我的脚本免受连接点的影响
$path = "\\server\D$\Temp"
$items = get-childitem $path -Force -Recurse
foreach($item in $items)
{
$subitems = get-childitem -recurse -path $item.fullname
foreach($subitem in $subitems)
{
if($subitem.lastwritetime -lt (date).adddays(-4))
{
$filename = $subitem.fullname
if($filename -ne $null)
{
#Use below code to specify file type
"Remove item: " + $filename + " - " + $subitem.lastwritetime
remove-item $filename -recurse -WhatIf
}
}
}
$subitems_after = get-childitem -recurse -path $item.fullname
if($subitems_after.Count -eq 0)
{
"Remove item: " + $item
remove-item $item.FullName -WhatIf
}
}
答案1
尝试以下脚本,它可能会过滤掉挂载点文件夹并列出常用文件夹(您也可以在该功能中添加时间过滤器或稍后执行):
function dir_NoMP ( $i ) {
#check if it is a mount point folder
$z = ( (get-item $i).Attributes -band [IO.FileAttributes]::ReparsePoint )
#if it it not an empty folder call function itself
if ( ($x =(Get-ChildItem $i -Directory ).fullname) -and (!$z ) ) {
#if it is a mount point , filter it out .
$x | foreach {if ( !( (get-item $_).Attributes -band [IO.FileAttributes]::ReparsePoint ) ) {$_} } ;
foreach ($y in $x) { dir_NoMP $y } }
}
dir_nomp "d:\test"
之后,您可以对这些列出的文件夹执行所需的操作。