2017-10-12 1 views
0

初めての投稿です。私は何をしているのか分かりません。mkvのcreationtime -powershellを比較します。

私が設定したオフィスカメラがWindows 2016ストレージサーバーにある「カメラ」共有にフィードをアップロードしていないかどうかを確認するスクリプトを作成する作業がありました。 。最新の.mkvが現在の時刻(get-date)と比較して1時間以上経過している場合は、「問題のある」カメラを手動で再起動する必要があります。

#Variable Definitions start here 

$numhours = 1 

Get-ChildItem "d:\Shares\Cameras" | Foreach {  

$folderToLookAt = ($_.FullName + "\*.mkv") 
$result = Get-ChildItem -Recurse $folderToLookAt | Sort-Object CreationTime -Descending 


echo $result[0].FullName 
echo $result[0].CreationTime 

} 

を最初の変数が実際にまだ使用されていないが、私は一種の何としてダム-打たよ:(。その部分スクリプトする必要はありません)

は、ここに私のディレクターは、これまでに書かれた内容ません次に行うこと。上記は最新の.mkvsのフルネームと作成時刻を返します

次のパートで提案しますか?事前に感謝の意を表します。

+0

うわー! Gents/Ladiesのすべての提案に感謝します。私は将来的にもっとポストするつもりです。コミュニティが超反応的であることを喜んで喜んでいる。 – Roachmen

答えて

0

あなたのパスは次のようになります。そうであれば

D:\Shares\Cameras\Camera1\file1.mkv 
D:\Shares\Cameras\Camera1\file2.mkv 
D:\Shares\Cameras\Camera2\file1.mkv 
D:\Shares\Cameras\Camera2\file2.mkv 
D:\Shares\Cameras\Camera3\file1.mkv 
. 
. 
. 

、私が何かをするだろう

# The path to your files 
$CameraShareRoot = 'D:\Shares\Cameras'; 

# Number of Hours 
$NumberOfHours = 1; 

# Date and time of significance. It's $NumberOfHours in the past. 
$MinFileAge = (Get-Date).AddHours(- $NumberOfHours); 

# Get all the folders at the camera share root 
Get-ChildItem -Path $CameraShareRoot -Directory | ForEach-Object { 
    # Get the most recently created file in each folder 
    $_ | Get-ChildItem -Recurse -Filter '*.mkv' -File | Sort-Object -Property CreationTime -Descending | Select-Object -First 1 
} | Where-Object { 
    # Remove any files that were created after our datetime 
    $_.CreationTime -lt $MinFileAge; 
} | Select-Object -Property FullName, CreationTime 

古いカメラの完全なファイル名と作成時間を出力するだけです。あなたは結果がすべてのファイルを持っているレポート自分を電子メールで送信するために、このような何かを行うことができ

# The path to your files 
$CameraShareRoot = 'D:\Shares\Cameras'; 

# Number of Hours 
$NumberOfHours = 1; 

# Date and time of significance. It's $NumberOfHours in the past. 
$MinFileAge = (Get-Date).AddHours(- $NumberOfHours); 

# Get all the folders at the camera share root, save the results to $StaleCameraFiles 
$StaleCameraFiles = Get-ChildItem -Path $CameraShareRoot -Directory | ForEach-Object { 
    # Get the most recently created file in each folder 
    $_ | Get-ChildItem -Recurse -Filter '*.mkv' -File | Sort-Object -Property CreationTime -Descending | Select-Object -First 1; 
} | Where-Object { 
    # Remove any files that were created after our datetime 
    $_.CreationTime -lt $MinFileAge; 
} 

# If there are any stale camera files 
if ($StaleCameraFiles) { 
    # Send an email 
    $MailMessage = @{ 
     SmtpServer = 'mail.example.com'; 
     To = '[email protected]'; 
     From = '[email protected]'; 
     Subject = 'Stale Camera Files'; 
     Body = $StaleCameraFiles | Select-Object -Property FullName, CreationTime | ConvertTo-Html -Fragment | Out-String; 
     BodyAsHtml = $true; 
    } 
    Send-MailMessage @MailMessage; 
} 

一般的に、あなたは、後者はファイル移動で更新することができますので、代わりにCreationTimeLastWriteTimeを使用したいと思うでしょうかコピーが、あなたがここで欲しいものかもしれません。

0

CreationTimeの日付を(Get-Date).AddHours(-1)と比較する必要があります。 AddHoursメソッドを使用すると、DateTimeに時間を追加できますが、減算することもできます。

次の例を使用することができます。

$Path = 'd:\Shares\Cameras' 
$CreationTime = Get-ChildItem -Path $Path -Filter *.mkv | 
    Sort-Object -Property CreationTime -Descending | 
    Select-Object -First 1 -ExpandProperty CreationTime 
if ($CreationTime -lt (Get-Date).AddHours(-1)) { 
    # your action here (restart, send mail, write output, ...) 
} 

それはまた、あなたのコードビットを最適化します。 ;)

+0

同じこともしません。元のコードはカメラのサブディレクトリごとに1回検索し、ルートディレクトリのmkvファイルを1つ探します。 – TessellatingHeckler

+0

これが必須であれば、 '$ Path'にワイルドカードを追加することができます。シナリオ/フォルダ構造に応じて 'Get-ChildItem'に' d:\ Shares \ Cameras \ * \ 'または' -Recurse'が追加されました – vrdse

0
$LatestFile = Get-ChildItem C:\Users\Connor\Desktop\ | Sort CreationTime | Select -Last 1 
if ($LatestFile.CreationTime -gt (Get-Date).AddHours(-1)){ 
    #It's Currently Working 
} else { 
    #Do Other Stuff 
} 
0

はこれを試してみてください。

Get-ChildItem "c:\temp" -Filter *.mkv -File | sort CreationTime -Descending | 
    select -First 1 | where CreationTime -lt (Get-Date).AddHours(-1) | 
     %{Write-Host "Alert !!" -ForegroundColor Red} 
1

反転ロジック - 代わりに、すべてのファイルを検索して並べ替え、最新の、そして日付をチェックを見つけ、それを他の方法でラウンドを行います。何が見つからなかった場合

カットオフ以降に作成されたファイルを探し、そして警告:私は仮定してい

$cutOffTime = [datetime]::Now.AddHours(-1) 

Get-ChildItem "d:\Shares\Cameras" | Foreach {  

    $folderToLookAt = ($_.FullName + "\*.mkv") 
    $result = Get-ChildItem -Recurse $folderToLookAt | Where-Object { $_.CreationTime -gt $cuttoffTime } 

    if (-not $result) 
    { 
     "$($_.Name) has no files since the cutoff time" 
    } 
} 
+1

これは完璧です。どうもありがとうございます!今度は、「切断されたファイルはありません」という事件がある場合、g-appsを使用して電子メールにIF文を入力するだけです。それは私のスキルレベルにあると思います。乾杯! – Roachmen

関連する問題