web-dev-qa-db-ja.com

ファイル/フォルダーの変更日を見つける

私はPowerShellを初めて使用しますが、ファイルの変更日を通知するスクリプトを作成するのに役立つことを望んでいました。

PowerShellについてもっと知りたいと思っています。私は多くのことを尋ねているように感じます(今週の私の自由時間はすべて、PowerShellをより良く学ぶことに専念します)。これを行う方法を学ぶ場所の方向に私を向けることも非常に役立ちます。

完全な概要は次のとおりです。 90の異なるストアにあるコンピューターのリストをチェックして、特定のバックアップが実行されたことを確認するレポートを毎日実行する必要があります。変更された日付は、バックアップが実行されたかどうかを示す必要があり、前の日付に設定されます。

変更日が昨日である場合、出力する必要はありません。昨日でなければ、PowerShellウィンドウまたはテキストファイルのどちらか簡単な方に出力したいと思います。

また、90の各店舗について、出力の基準が同じであるフォルダーが7日以内であることを確認する必要があります。私が持っているという考えは、各店でこのようになります

ストア1の場合:

Check file date for \\server\store\computer\c:\folder\"newest modified date in folder"
if date equals yesterday
   then do nothing
if date does not equal yesterday
   then output "Test did not backup"

check folder modified date for \\server\sample\store\backupfolder
if date equals <7 days old
   then do nothign
if date equals >7 days old
   then output "test did not backup"

私の研究努力を証明していないことを残念に思う、私はPowershellに非常に新しいので、私はこれを成し遂げる期限にありました。昨日から、このスクリプトで必要なことをすべて行う方法を学びました。正しいパスを設定してくれた@Keithに感謝します。結果が偽の場所のみを出力するという目標を達成するために、次のコードを使用することになりました。

$a = Get-ChildItem \\server\XXX\Received_Orders\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-7)}
if ($a = (Get-ChildItem \\server\XXX\Received_Orders\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-7)}))
{
}
Else
{
    'STORE XXX HAS NOT RECEIVED ANY ORDERS IN THE PAST 7 DAYS'
}


$b = Get-ChildItem \\COMP NAME\Folder\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-1)}
if ($b = (Get-ChildItem \\COMP NAME\TFolder\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-1)}))
{
}
Else
{
    'STORE XXX DID NOT RUN ITS BACKUP LAST NIGHT'
}
26
Seth Little

Get-ItemまたはGet-ChildItemコマンドを実行すると、これらの情報を含む System.IO.FileInfo および System.IO.DirectoryInfo オブジェクトが出力されます。

Get-Item c:\folder | Format-List  

または、次のように直接プロパティにアクセスできます。

Get-Item c:\folder | Foreach {$_.LastWriteTime}

最終書き込み時間に基づいてフォルダーとファイルのフィルターを開始するには、次の操作を実行できます。

Get-ChildItem c:\folder | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-7)}
50
Keith Hill

単一のファイルで変更日を取得するには、次を試してください。

$lastModifiedDate = (Get-Item "C:\foo.tmp").LastWriteTime

他と比較するには:

$dateA= $lastModifiedDate 
$dateB= (Get-Item "C:\other.tmp").LastWriteTime

if ($dateA -ge $dateB) {
  Write-Host("C:\foo.tmp was modified at the same time or after C:\other.tmp")
} else {
  Write-Host("C:\foo.tmp was modified before C:\other.tmp")
}

ここに私のために働いたものがあります:

$a = Get-ChildItem \\server\XXX\Received_Orders\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-7)}
if ($a = (Get-ChildItem \\server\XXX\Received_Orders\*.* | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-7)}  
#Im using the -gt switch instead of -ge
{}
Else
{
'STORE XXX HAS NOT RECEIVED ANY ORDERS IN THE PAST 7 DAYS'
}


$b = Get-ChildItem \\COMP NAME\Folder\*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-1)}
if ($b = (Get-ChildItem \\COMP NAME\TFolder\*.* | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-1)))}
{}
Else
{
'STORE XXX DID NOT RUN ITS BACKUP LAST NIGHT'
}
0
TelluRye