35

私は 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に感謝します。次のコードを使用して、結果が false である場所のみを出力するという目標を達成しました。

$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'
}
4

5 に答える 5

67

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)}
于 2013-11-04T18:22:20.753 に答える
24

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

$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")
}
于 2017-07-31T22:36:55.267 に答える
0

これが私のために働いたものです:

$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'
}
于 2016-08-30T17:11:47.733 に答える