PowerShellを使用してコンピューターの稼働時間を取得する

0 Comments

コンピューターの稼働時間は、システム管理において重要な統計です。 ここでは、コンピュータのシステム稼働時間を決定する方法のいくつかを示します(このリストは決して網羅的ではないことに注意してください)。

1. のタスクマネージャーの性能をタブのコンピュータアップタイムとしての日、時間、分、秒です。

2. Systeminfoコマンドラインツールは、コンピュータの最終起動時刻を表示します。

3. 最新のイベントID6005のコンピュータシステムのイベントログの記録のコンピュータの最後のブーツ。

4., WMI Win32_OperatingSystemクラスには、コンピューターの最終起動時刻を含むLastBootUpTimeプロパティがあります。

これらのテクニックにはそれぞれ長所と短所があります。 たとえば、タスクマネージャーは単一のコンピューターの稼働時間をすばやく表示し、イベントログには6005イベントに関する追加情報が含まれており、システム 最初の三つの選択肢は、おそらく自動化の目的(例えば、稼働時間のためにサーバーのリストを照会する)に最適ではないので、WMIを見てみましょう。 ただし、まず、WMIが稼働時間の情報を返す方法を見てみる必要があります。,

WMIを使用してコンピュータの稼働時間を取得する

WMIを使用してコンピュータの稼働時間を取得する方法はいくつかあります。 Windows PowerShellより前の最も明白な方法の一つは、WMICコマンドを使用することでした。 たとえば、

このコマンドは、コンピューター上のWin32_OperatingSystemクラスインスタンスのLastBootUpTimeプロパティを取得します。, PowerShellでは、WMICではなくGet-WmiObjectコマンドレットを使用します。

これらのコマンドを自分で試してみると、LastBootUpTimeプロパティで表現された日付と時刻がCIM(Common Information Model)datetime文字列として書式設定されているため、出力が必ずしも”ユーザーフレンドリー”ではないことがわかります。 たとえば、

この日時文字列はMayに変換されます12, 2016, 15:48:36 (3:午後48時)。 125599はマイクロ秒数(これらは無視します)であり、-360はGMTからのオフセット分数表します。, この例では、-360は時間がGMTより6時間遅れていることを意味します。 (同様に、+180は”GMTの3時間前”を意味します。CIM datetime文字列をより使いやすくするには、それを使用可能な日付(DateTimeオブジェクト)に変換する必要があります。 幸いなことに、PowerShellはこれを簡単にします:システムのToDateTime静的メソッド。マネジメント。ManagementDateTimeConverter.netクラスは、Cim datetime文字列をPowerShellでより簡単に使用できるDateTimeオブジェクトに変換します。 図1にその例を示します。,

図1-コンピュータの最終起動時刻をDateTimeに変換する

図1では、$dateTime変数には、現在のコンピュータが最後に起動した日付と時刻が含まれています。 (最後のブートの日付と時刻ではなく)稼働時間の出力を取得するには、現在の時刻(Get-Date)からそれを減算し、その差を含むTimeSpanオブジェクトになります。 図2にその例を示します。,

図2-コンピュータの最終起動時刻を読み取り可能な稼働時間に変換する

図2の最初のコマンドは、現在の日付と時刻と最終起動時刻(図1で作成した$dateTimeオブジェクト)の差を含むTimeSpanオブジェクトを作成します。 最後のコマンドは、-f演算子を使用して、現在のコンピュータが4日、19時間、56分、44秒間稼働していることを示す読み取り可能な形式の文字列としてTimeSpanを,

リモートコンピュータからの最後のブート時間の取得

図1および2の例は、ローカルコンピュータを対象としています。 どのようにして対象のリモートコンピュータ? 幸いなことにWMIできる情報を取得のリモートコンピュータを利用-ComputerNameパラメータとします。 WMIでは、PSCredentialオブジェクト内のリモートコンピューターの代替資格情報を指定することもできます。 図3に、server1という名前のコンピューターの最終起動時間を取得する例を示します。,

図3-リモートコンピュータからの最終ブート時間の取得

図3の最初のコマンドは、$cred変数にPSCredentialオブジェクトを取得し、次のコマンドは、コンピュータserver1の最終ブート時間を含むCIM datetime文字列を取得します(-ComputerNameパラメータと-Credentialパラメータに注意してください)。 最後のコマンドは、最後のブート時刻をDateTimeオブジェクトに変換し、最後のコマンドはコンピューターの最後のブート時刻を出力します。

それをすべてまとめる-Get-Uptime。,ps1Script

図1と図2に示す例は、コンピュータの最終ブート時間を取得して読みやすい文字列として表示する方法を示し、図3はリモートコンピュータの最終ブート時間を取得する方法を示しています。 もちろん、ロジックを使いやすいスクリプトにカプセル化すれば、すべてのニュアンスを覚えておく必要はありません。 Get-Uptime.ps1スクリプトは、私たちのためにすべてのハードワークを行います。 スクリプトの構文は次のとおりです。

-ComputerNameパラメーターはオプションで、稼働時間の情報を取得するコンピューターに名前を付けます。, このパラメータに対応し、複数のオブジェクトのパイプライン入力、およびオブジェクトをしていComputerName物件です。 -ComputerNameパラメーター名は省略可能です。 このパラメーターを省略すると、現在のコンピューターの稼働時間の情報がデフォルトで出力されます。

-Credentialパラメーターは、一つ以上のリモートコンピューターを照会する場合に、現在のログオンアカウントにアクセスできない場合に、代替の資格情報を提供します。 タアップタイムを必要としない管理者権限でローカルコンピュータで必要なリモートコンピュータ,ComputerName(コンピューターの名前)、LastBootTime(コンピューターの最終起動時刻を含むDateTime)、およびUptime(読みやすい稼働時間の文字列)の三つのプロパティを持つオブジェクトを出力します。

複数のコンピューターの稼働時間の取得

図4は、三つのリモートコンピューターの稼働時間の取得を示しています。,

図4-三つのリモートコンピューターの稼働時間の取得二つの異なる方法

図4の最初のコマンドは、Get-Uptimeスクリプトのパラメーターとして三つのコンピューターを指定し、二つ目のコマンドはパイプライン入力として三つのコンピューターを指定します。 両方のコマンドが同じ出力を生成することに注意してください(第二のコマンドからの出力の稼働時間の文字列が少し後であることを除いて)。

スクリプトはパイプライン入力をサポートしているため、Get-ADComputerコマンドレットの出力を使用して、OU内のすべてのコンピューターの稼働時間を報告すること, たとえば、次のコマンドを考えてみましょう。

(コマンドを複数の行に分割して読みやすくしました。)このコマンドは、Servers OU内のすべてのコンピューターの名前を取得し、各コンピューターのNameプロパティ(Select-Object-ExpandProperty)のみを選択し、コンピューター名のリストを並べ替え、最後に各コンピューターから稼働時間を取得します。

コンピュータの稼働時間は簡単になりました

コンピュータの稼働時間は重要な指標です。 PowerShellでは、稼働時間を取得するにはさまざまな方法がありますが、単純な方法ではありません。 ゲットアップタイム。,ps1スクリプトは、このギャップを埋め、あなたが現在のコンピュータの稼働時間やリモートコンピュータの稼働時間を取得したいかどうかに関係なく、コ


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です