トップ回答者
CreationTimeを条件にファイルを取得できない

質問
-
お世話になります。
ログファイルをCreationTimeを条件に取得したいのですが、うまく動作しません。
他の日付属性および比較演算子でもダメでした。
なお、イベントログの取得では日付属性を条件にしてもうまく動作します。
${DateTime} = "yyyy/mm/dd hh:mm:nn" -as [DateTime]
NG:Get-ChildItem "C:\Log\Apache\*" -include access_log.* | Where-Object {$_.CreationTime -eq ${DateTime}}
OK:Get-EventLog system | Where-Object {$_.TimeGenerated -eq ${DateTime}}
よろしくお願い致します。
回答
-
K. Takaokaさんのご回答の通り、やり方はいろいろあると思いますが、簡単にやるならこういうのもあるかと思います。
where {(Get-Date $_.CreationTime.DateTime) -eq $DateTime}
これも実際は文字列を経由してDateTime型に戻してるので、プログラム的にはあまりほめられたものでもないのですが、結果的には日付型で比較してますし、見た目的にはすっきりしていていいかもしれません。
あるいは
where {(Get-Date $_.CreationTime -Millisecond 0) -eq $DateTime}
でもいけますね。こっちは文字列を経由しない分、よりよいかもしれません。
- 編集済み 牟田口大介Moderator 2012年11月13日 9:04
- 回答としてマーク 牟田口大介Moderator 2012年11月15日 5:56
-
やりかたは色々あると思いますが、文字列にしてしまうのがお手軽じゃないでしょうか?
where {
$_.CreationTime.ToString("yyyyMMddHHmmss",
[Globalization.CultureInfo]::InvariantCulture) -eq "20121109102519" }みたいな。時間の比較でやりたければ、
where {
# 日付が同じ かつ
$_.CreationTime.Date -eq $DateTime.Date -and
# 00:00:00 からの経過秒数(切り捨て)が同じ
[int] $_.CreationTime.TimeOfDay.TotalSeconds -eq
[int] $DateTime.TimeOfDay.TotalSeconds
}などなど。
- 編集済み K. Takaoka 2012年11月13日 8:28
- 回答としてマーク 牟田口大介Moderator 2012年11月15日 5:56
すべての返信
-
やりかたは色々あると思いますが、文字列にしてしまうのがお手軽じゃないでしょうか?
where {
$_.CreationTime.ToString("yyyyMMddHHmmss",
[Globalization.CultureInfo]::InvariantCulture) -eq "20121109102519" }みたいな。時間の比較でやりたければ、
where {
# 日付が同じ かつ
$_.CreationTime.Date -eq $DateTime.Date -and
# 00:00:00 からの経過秒数(切り捨て)が同じ
[int] $_.CreationTime.TimeOfDay.TotalSeconds -eq
[int] $DateTime.TimeOfDay.TotalSeconds
}などなど。
- 編集済み K. Takaoka 2012年11月13日 8:28
- 回答としてマーク 牟田口大介Moderator 2012年11月15日 5:56
-
K. Takaokaさんのご回答の通り、やり方はいろいろあると思いますが、簡単にやるならこういうのもあるかと思います。
where {(Get-Date $_.CreationTime.DateTime) -eq $DateTime}
これも実際は文字列を経由してDateTime型に戻してるので、プログラム的にはあまりほめられたものでもないのですが、結果的には日付型で比較してますし、見た目的にはすっきりしていていいかもしれません。
あるいは
where {(Get-Date $_.CreationTime -Millisecond 0) -eq $DateTime}
でもいけますね。こっちは文字列を経由しない分、よりよいかもしれません。
- 編集済み 牟田口大介Moderator 2012年11月13日 9:04
- 回答としてマーク 牟田口大介Moderator 2012年11月15日 5:56
-
K. Takaoka様
牟田口大介様
お世話になります。
回答有難う御座いました。
下記の二通りでうまくいきました。
Where-Object {$_.CreationTime.ToString("yyyy/MM/dd hh:mm:ss") -eq ${DateTime}}
Where-Object {(Get-Date $_.CreationTime.DateTime) -eq ${DateTime}}
下記は「Get-Date : パラメーター名 'Millisecond' に一致するパラメーターが見つかりません。」とエラーが出てしまいうまくいきませんでした。
Where-Object {(Get-Date $_.CreationTime -Millisecond 0) -eq ${DateTime}}
うまく行った記述で進めていきたいと思います。
有難うございました。