1

ファイルツリーを再帰的にウォークし、各ノードのパスとその作成時刻をタブ区切り形式で返す単純なPowerShellスクリプトを作成しました。これにより、テキストファイルに書き出して、統計分析に使用できます。 :

echo "PATH  CREATEDATE"
get-childitem -recurse | foreach-object {
$filepath = $_.FullName
$datecreated = $_.CreationTime
echo "$filepath $datecreated"
} 

ただし、これを実行すると、スクリプトによって生成されるCreationDateの時間は、同じファイルの同じ属性を調べたときにWindowsエクスプローラーが言う時間よりも正確に1時間進んでいることに気付きました。データセットの残りの部分(周囲のイベントを別の形式で記録したもの)を調べたところ、エクスプローラーから得た結果だけが全体的な説明に当てはまることが明らかであり、Powershellに何か問題があると私は信じています。間違った時刻を書き出すスクリプト。なぜそうなるのか、誰かが理解していますか?

問題の背景:

一部のXMLログファイルの設計の問題を修正しようとしています。このファイルは、ユーザーがワークフローのさまざまな段階を通過するのにかかった時間を実際に記録することになっているときに、ユーザーがアプリケーションの使用を開始および停止したときに記録されました。 。ユーザーがXMLログと一緒に送信したバックアップファイルから日付情報を取得することで、この問題を解決するための可能な方法を見つけました。バックアップは、ユーザーがワークフローのステージ間を移行する正確な瞬間にエンドユーザーアプリケーションによって生成されるため、これらのファイルのタイムスタンプからの情報を元のXMLログの内容と一緒に取得して、何を把握しようとしています。ワークフローの手順について知りたいと思いました。

コメントディスカッションで出てきたポイントのまとめ:

  • ファイルは、実行しているスクリプトと同じマシンにあります(ネットワークストアではありません)。
  • 夏時間とタイムゾーンを修正すると、データ品質が向上しますが、元の質問で提起された特定の問題については改善されません。
4

1 に答える 1

0

PowerShellとエクスプローラーのタイムスタンプの不一致の最終的な技術的理由は見つかりませんでしたが、PowerShellスクリプトから取得したすべてのタイムスタンプから1時間を差し引くだけで修正できました。ただし、それを行った後でも、XMLログファイルから取得したタイムスタンプと、PowerShellスクリプトを使用してファイルシステムから取得したタイムスタンプとの間には、かなりの不一致がありました。エンドユーザーがファイルを生成しているときにおそらく同じタイムゾーンにとどまっているという理由で、ワークフローとステップのステップ1と2の間の時間の中央値を評価することによって、各ユーザーのタイムゾーンを推定する小さなアルゴリズムを作成しました2および3。ユーザーのタイムゾーンに問題があった場合は、これらの2つのタイムスパンの1つは負になります(ステップ2イベントの時間が推定され、ステップ1と3のイベントの時間がXMLログからわかっているため)。次に、正の値を最も近い時間に切り捨てて適用しました。そのユーザーのステップへの2回のオフセットとしてのその時間数。全体として、これによりデータセット内の不良データの量が20%から0.01%に減少したため、結果に満足しています。

誰かがそれを必要とする場合に備えて、タイムスタンプで時間オフセットを作成するために使用したコードを次に示します(PowerShellコードではなく、これはデータ処理の別の部分を処理するC#スクリプトに含まれていました)。

    DateTime step2time = DateTime.Parse(LastModifyDate);
    TimeSpan shenanigansCorrection = new TimeSpan(step2time.Hour-1,step2time.Minute,step2time.Second); 
    step2time= step2time.Date + shenanigansCorrection;

変数を再定義する理由step2timeは、DateTimesが.NETで変更できないためです。

于 2013-01-11T15:03:43.580 に答える