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に感謝します。 最終的には以下のコードを使って、resultが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'
}
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)}
私の場合は以下のようになりました。
$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'
}
過去2日以内に更新された全てのドキュメントライブラリファイルを検索するPowerShellコードです。
$web = Get-SPWeb -Identity http://siteName:9090/
$list = $web.GetList("http://siteName:9090/Style Library/")
$folderquery = New-Object Microsoft.SharePoint.SPQuery
$foldercamlQuery =
'<Where> <Eq>
<FieldRef Name="ContentType" /> <Value Type="text">Folder</Value>
</Eq> </Where>'
$folderquery.Query = $foldercamlQuery
$folders = $list.GetItems($folderquery)
foreach($folderItem in $folders)
{
$folder = $folderItem.Folder
if($folder.ItemCount -gt 0){
Write-Host " find Item count " $folder.ItemCount
$oldest = $null
$files = $folder.Files
$date = (Get-Date).AddDays(-2).ToString(“MM/dd/yyyy”)
foreach ($file in $files){
if($file.Item["Modified"]-Ge $date)
{
Write-Host "Last 2 days modified folder name:" $folder " File Name: " $file.Item["Name"] " Date of midified: " $file.Item["Modified"]
}
}
}
else
{
Write-Warning "$folder['Name'] is empty"
}
}