サーバーからログ ファイルをアーカイブするために使用するスクリプトを作成しました。私はGet-ChildItemの再帰性かどうかを除いて、すべてにおいてかなり良い状態です ...
私が抱えていると思われる問題は、Get-ChildItem が再帰的で-Include
はなく、フィルターが 1 つしかない場合、無視されることです! または、私は何か間違ったことをしています(可能性があります)。
出力を少し整理しました...
PS C:\foo> Get-childitem -path "c:\foo"
Name
----
bar1.doc
bar2.doc
bar3.doc
foo1.txt
foo2.txt
foo3.txt
PS C:\foo> Get-childitem -path "c:\foo" -Include *.txt
PS C:\foo> Get-childitem -path "c:\foo" -Include *.txt -recurse
Name
----
foo1.txt
foo2.txt
foo3.txt
すっごく??? 再帰スイッチを持たないスクリプトのパスに分岐するだけでよいという幻想がありました。(ちなみに、唯一の可変性がコマンドレットへのパラメーターである重複したコード パスを回避するために、パラメーターを可変的に適用することは可能ですか?)
とにかく、Get-ChildItem に関する問題に加えて、完全を期すためのスクリプトを次に示します。
function MoveFiles()
{
Get-ChildItem -Path $source -Recurse -Include $ext | where { $_.LastWriteTime -lt (Get-Date).AddDays(-$days) } | foreach {
$SourceDirectory = $_.DirectoryName;
$SourceFile = $_.FullName;
$DestinationDirectory = $SourceDirectory -replace [regex]::Escape($source), $dest;
$DestionationFile = $SourceFile -replace [regex]::Escape($source), $dest;
if ($WhatIf){
#Write-Host $SourceDirectory;
#Write-Host $DestinationDirectory;
Write-Host $SourceFile -NoNewline
Write-Host " moved to " -NoNewline
Write-Host $DestionationFile;
}
else{
if ($DestinationDirectory)
{
if ( -not [System.IO.Directory]::Exists($DestinationDirectory)) {
[void](New-Item $DestinationDirectory -ItemType directory -Force);
}
Move-Item -Path $SourceFile -Destination $DestionationFile -Force;
}
}
}
}