web-dev-qa-db-ja.com

Windows 8.1:「真の」稼働時間を確認する方法は?

注意深く読んでください;これは通常の稼働時間の質問ではありません。

私はそうしない傾向がありますシャットダウンコンピュータ自体ではなく、代わりにスリープ状態にします。起動時間が短縮され、WOLを使用できるようになります。さまざまな「uptime」メソッド(sysinfo、uptime.exe、タスクマネージャーなど)は、最後のフルブートからの時間を表示します。つまり、スリープに費やされた時間が考慮されます。私が探しているのはtrue uptime ;つまり、最後に起動してからPCが起動してからの時間だけです。

3
seagull

これを行うソフトウェアはないので、これを行うことができる唯一の方法は、基本的に変数に毎秒(または分)+1を与え、変数の値を読み取る方法を持つスクリプトを作成することです。 。 PCが休止状態/スリープなどの場合、スクリプトは実行されていないため、カウンターは増加しません。

そのようなスクリプトが常にバックグラウンドで実行されている場合、システムに影響を与える可能性が高いので、問題は、これがどれほどひどく必要かということです。

(スクリプトへの影響の理由)スクリプトの実行時間が長くなるほど、数値は大きくなり、値が非常に大きい場合は、格納するためにより多くのメモリが必要であることを意味します。 (整数(65535)にすることはできない値について話しますが、これを高くすると、システムは数日/数週間稼働している必要があると思います。もちろん、日数をカウントして値をリセットするスクリプトを作成することもできます。それを排除しますが、その場合、スクリプトはそのサイクルでより多くのコードを通過し、それ自体も少しでも影響を及ぼします。

1
LPChip

Windowsは、スリープから復帰するためのシステムイベントを生成します(イベントID:1、ソース:Power-Troubleshooter)。このイベントには、スリープ時間とウェイク時間が含まれます。

Wake Event

ソース: ウェイクソース-イベントビューアログの読み取り-Windows 7ヘルプフォーラム

「真の稼働時間」の値を決定するには、(言及したソースから)最後の起動時間を決定し、その後のウェイクイベントからスリープに費やした時間を差し引きます。

注:.NETライブラリ(スーパーユーザーではトピック外)を使用して、イベントログをクエリするアプリケーションを作成できます。

1
Steven

「真の稼働時間」の定義はどの程度柔軟ですか。 LPChipの回答 のバリエーションは、ワークステーションのロックとワークステーションのロック解除によってトリガーされるスケジュールされたタスクを記述してから、明らかな計算を行うことです。

そして、数学が明白でない場合:

  1. 「論理」起動時間と累積稼働時間の2つの値を追跡します。これらのうち、一度に有効になるのは1つだけです。したがって、間違いなく、どれが有効であるかを追跡するためのフラグも必要ですが、これは実際にはコンテキストによって決定できます。
  2. システムの起動時に実行されるイベント、または「論理」起動時間を実際の起動時間に初期化する他のメカニズムも必要になると思います。
  3. ワークステーションがロックされている場合は、現在の時刻から論理ブート時間を差し引き、これを累積稼働時間として保存します。
  4. ワークステーションのロックが解除されたら、現在の時刻から累積稼働時間を差し引き、これを論理起動時刻として保存します。
  5. 要求に応じて、現在の時刻から論理ブート時間を差し引き、これを「真の」稼働時間として報告します。 (これにより、PCのロックが解除された合計時間がわかります。)

だから、例えば、

  1. 9 AMでハードブートを実行すると、論理ブート時間として9AMが節約されます。
  2. 正午にマシンをロックすると、累積稼働時間として3時間(正午-9 AM)節約できます。
  3. 1 PMにマシンのロックを解除すると、論理ブート時間として10 AM(1 PM − 3時間)が節約されます。
  4. 午後6時に稼働時間を要求すると、これは8時間を報告します
    (6 PM − 10 AM =(正午− 9 AM)+(6 PM − 1 PM))

スリープとウェイクアップで実行するタスクをトリガーする方法を理解できる場合は、それを実行すると、要求したとおりの結果が得られます。 (ただし、マシンをスリープ状態にすると、ロックタスクがトリガーされます。システムは、ウェイク後にロック解除を要求するように構成されていると思います。)

0
Scott