
時々、Windows Server 2003 マシンを強制的にシャットダウンすると (選択の余地はありません)、特定のディレクトリに含まれるフォルダーの「変更日」がすべて現在の日付に変更されます。
幸いなことに、これらの各フォルダ内のファイルはすべて正しい「変更日」になっています。
「変更日(または作成日)」をコピーしたいファイルの 1 つは、各フォルダーに含まれる .jdf ファイルです。
PowerSell でスクリプトを作成するのに助けが必要です。
ほぼ目的の役割を果たす次の PS1 スクリプトを見つけました:
Get-ChildItem $root | Where-Object {$_.PSIsContainer} | Foreach-Object{
# get the oldest file for the current directory object
$oldest = Get-ChildItem $_.FullName | Sort-Object LastWriteTime | Select-Object LastWriteTime -Last 1
if($oldest)
{
# oldest object found, set current directory LastWriteTime
$_ | Set-ItemProperty -Name CreationTime -Value $oldest.LastWriteTime
$_ | Set-ItemProperty -Name LastWriteTime -Value $oldest.LastWriteTime
}
else
{
# current directory is empty, directory LastWriteTime is left unchanged
Write-Warning "Directory '$($_.FullName)' is empty, skiping..."
}
}
問題は、フォルダー内の最後に変更されたオブジェクトが、現在の日付を「変更日」として取得するサブフォルダーである場合があることです。フォルダーではなく、フォルダー内のファイルが表示されるようにするにはどうすればよいでしょうか?
答え1
これを試して:
Get-ChildItem $root |
Where-Object { $_.PSIsContainer } |
Foreach-Object{
$oldest = Get-ChildItem $_.FullName |
Where-Object { ! $_.PSIsContainer } |
Sort-Object LastWriteTime |
Select-Object -Last 1
if($oldest)
{
$_ | Set-ItemProperty -Name CreationTime -Value $oldest.LastWriteTime
$_ | Set-ItemProperty -Name LastWriteTime -Value $oldest.LastWriteTime
}
else
{
# current directory is empty, directory LastWriteTime is left unchanged
Write-Warning "Directory '$($_.FullName)' is empty, skiping..."
}
}
答え2
Get-ChildItem $root -directory
一方、は、
Get-ChildItem $root | Where-Object {$_.PSIsContainer}
試してみることができます(詳細な構文はわかりませんPS
)
Get-ChildItem $root -file
あるいは
gci $root -file
スクリプトの残りの部分に改善が必要かどうかはわかりません...