Powershell,清理 x 天前的文件 - 防止 NTFS 连接点

Powershell,清理 x 天前的文件 - 防止 NTFS 连接点

我有一个脚本,可以清理超过 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"

之后,您可以对这些列出的文件夹执行所需的操作。

相关内容