1

「電子メール」プレフィックスが付いたフォルダー内の 6 か月以上前の PDF ファイルを削除するスクリプトを作成しています。

ただし、foreach 内の 2 番目の dir コマンドは実行されず、そのコードはブロックされます。

$Now = Get-Date;
$DaysTillDelete = "180";
$LastWrite = $Now.AddDays(-$DaysTillDelete);
$TargetFolder = "C:\Test EMDATA\EMDATA\";
$BackupPath = "\\SHPFS02\IT\EmPower Old";
$EmailFolders = @();

if(-Not(Test-Path -path ($TargetFolder + "\OldFiles" ))) {
    mkdir -p ($TargetFolder +"\OldFiles");    
}
$Network = Test-Path $BackupPath
#New-PSDrive -Name O -PSProvider FileSystem -Root "$BackupPath"; #-Credential $cred

Write-Host "Running Script"
dir $TargetFolder | %{

    # Only delete files with the Email prefix
    $name = $_.Name;    
    if ($_.Name.Length -le 5) {return;}
    $id = $_.Name.SubString(0,5);            
    if ($id -eq "Email")
    {       
        Write-Host "Found slip folder"        
        $EmailFolders += $TargetFolder + $_;        
    }
}

ForEach ($folder in $EmailFolders)
{
    Write-Host $folder;
    dir -path $folder -include *.pdf | %{

        Write-Host "Checking" $name;
        # Only select files older than 6 months
        if( $_.LastWriteTime -le "$LastWrite")
        {
            $activeItem = Get-Item $TargetFolder + $_;
            #Move files into oldfiles
            Write-Host $TargetFolder
            move-item -path $activeItem -destination ($TargetFolder + "OldFiles\");            
            if ($Network)
            {                
                move-item -path $activeItem  -destination "O:\";
            }            
            Write-Host $_;            
            remove-item $activeItem;
            Write-Host "Deleting" + $name;
        }
    }
}

スクリプトは 31 行目までは機能しますが、32 行目以降は機能しません。かなり初心者の PS ユーザーである私には理由がわかりません。

4

1 に答える 1

2

パラメータでのみ使用-include-recurseます。

http://technet.microsoft.com/en-us/library/hh849800.aspx

Include パラメーターは、コマンドに Recurse パラメーターが含まれている場合、またはパスが C:\Windows* などのディレクトリの内容につながる場合にのみ有効です。ここで、ワイルドカード文字は C:\Windows ディレクトリの内容を指定します。

代わりに必要なのは-filterパラメータです:

dir -path $folder -filter *.pdf
于 2013-07-30T02:02:00.043 に答える