Bir dosyanın/klasörün değiştirilme tarihini bulma

PowerShell'de çok yeniyim ve bir dosyanın değiştirilme tarihini söyleyen bir betik oluştururken yardım alabileceğimi umuyordum.

Keşke PowerShell hakkında daha fazla şey bilseydim, çünkü çok şey soruyormuşum gibi hissediyorum (bu haftaki tüm boş zamanımı PowerShell'i daha iyi öğrenmeye ayıracağım). Bunun nasıl yapılacağını nereden öğrenebileceğimi göstermeniz de çok yardımcı olacaktır.

İşte tüm özet. Belirli bir yedeklemenin yapıldığından emin olmak için 90 farklı mağazadaki bilgisayarların listesini kontrol eden bir raporu günlük olarak çalıştırmam gerekiyor. Değiştirilen tarih, yedeklemenin gerçekleştirilip gerçekleştirilmediğini söylemeli ve önceki tarihe ayarlanmalıdır.

Değiştirme tarihi dün ise, bir çıktı olmasına gerek yoktur. Dün değilse, çıktının PowerShell penceresinde veya bir metin dosyasında olmasını istiyorum, hangisi daha kolay olur.

Ayrıca 90 mağazanın her biri için bir klasörün yedi günden daha eski olmadığını kontrol etmem gerekiyor, çıktı için de aynı kriterler geçerli. Sahip olduğum fikir her mağaza için şu şekilde olacaktır

Mağaza 1 için:

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"

Araştırma çabamı kanıtlayamadığım için özür dilerim, Powershell'de çok yeniyim ve bunu yapmak için son teslim tarihim vardı. Dünden beri bu betikle yapmam gereken her şeyi nasıl yapacağımı öğrendim. Beni doğru yola soktuğu için @Keith'e teşekkürler. Sonunda aşağıdaki kodu kullanarak yalnızca sonucun yanlış olduğu konumu dışarı atma hedefimi gerçekleştirdim.

$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'
}
Çözüm

Get-Item veya Get-ChildItem komutlarını çalıştırırsanız, bunlar bu bilgileri içeren System.IO.FileInfo ve System.IO.DirectoryInfo nesnelerinin çıktısını verecektir, örn:

Get-Item c:\folder | Format-List  

Ya da mülke doğrudan şu şekilde erişebilirsiniz:

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

Klasörleri & dosyaları son yazma zamanına göre filtrelemeye başlamak için bunu yapabilirsiniz:

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

İşte bende işe yarayan şey:

$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'
}
Yorumlar (0)

Son 2 gün içinde değiştirilen tüm belge kitaplığı dosyalarını bulmak için PowerShell kodu.

$web = Get-SPWeb -Identity http://siteName:9090/ 
        $list = $web.GetList("http://siteName:9090/Style Library/")
        $folderquery =  New-Object Microsoft.SharePoint.SPQuery  
        $foldercamlQuery =  
        '    
                  Folder 
             ' 
        $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" 
            } 
        }
Yorumlar (1)