<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1678611822423757&amp;ev=PageView&amp;noscript=1">

PowerShell を使用した再起動時間の測定

Dan Franciscus| September 11 2019

| IT insights

measuring-reboot-time-with-powershell

エンタープライズ環境には、通常、様々な Windows オペレーティングシステム、ハードウェア、そしてもちろん数多くのソフトウェアがあります。マシンは、多くの場合、グループポリシーと SCCM、あるいは Chef Puppet などの他の新しい方法で設定され、管理されます。Windows コンピュータに問題がないかどうかをチェックするための1つの指標として、起動にかかる時間があります。

起動するのにこれまでより長くかかるようになった場合、ハードディスクなどのハードウェアに障害が発生している可能性があります。あるいは、何らかのグループポリシーによって、ログイン画面に到達するプロセスが遅くなっているのかもしれません。起動時間に遅延がないかをチェックするには起動時間を測定する必要があります。このブログでは、PowerShell を使用して、コンピュータがシャットダウンしてから起動するまでの時間を測定する方法を示します。

Measure-RebootTime コマンド

しばらく前、あるマシン群に関してユーザーから苦情が寄せられました。ユーザーは、マシンの再起動に時間がかかり、ときには15分もかかる場合もあるという問題を訴えていました。マシンは特定の日や時間帯には使用されておらず、その使用されていない時間を使ってリブート時間を測定することにしました。そのために私が作成した PowerShell 関数は、ヘルパー関数 Get-RebootTime を含む Measure-RebootTime です。

Get-RebootTime 関数自体は非常にシンプルです。測定には Measure-Command を使います。Restart-Computer を使用して、リモート接続で PowerShellWMI)が使用可能になるのを待ちます。1,200秒のタイムアウトも設定しておきます。秒を小数点以下2桁に丸めて、PSCustomObject にスローします。

$Time = Measure-Command {

    Restart-Computer -ComputerName $ComputerName -Wait -For powershell -Timeout 1200 -ErrorAction Stop

} | Select-Object -ExpandProperty TotalSeconds

$RoundedTime = [math]::Round($Time,2)

[PSCustomObject]@{

    ComputerName = $ComputerName

    Seconds = $RoundedTime

}

Get-RebootTime を作成した後、このプロセスを一度に複数のコンピュータに適用すべきだと気が付きました。そこで、ジョブの複数のマシンに適用するために PoshRSJob を使う、Measure-RebootTime を追加しました。PoshRSJobは、Bo Prox によって作成された優れた PowerShell コミュニティモジュールであり、PowerShell 実行スペースで広く使用されています。

#requires -modules PoshRSJob

function Measure-RebootTime {

    [CmdletBinding()]

    param(

        [Parameter(Mandatory=$true)]

        [string[]]$ComputerName

    )

    $ComputerName | Start-RSJob -ScriptBlock {Get-RebootTime -ComputerName $_ } -Throttle 150 | Wait-RSJob | Get-RSJob | Receive-RSJob | Select-Object *

}

テスト

この例では、リブートするのにかかる時間を測定したい2台のマシン、Test-1 と Test-2 があると想定しています。
両方を、-ComputerName パラメータに追加して、Measure-RebootTime を実行します。

C:\> Measure-RebootTime -ComputerName Test-1,Test-2




ComputerName Seconds

------------ -------

Test-1       51

Test-2       50




結果として、コンピュータ名と、コンピュータを再起動してネットワーク経由で WMI にアクセスできるようになるまでにかかった秒数が表示されます。この場合、それぞれに約50秒かかっています。再起動時間を把握して、特定のマシンの再起動操作に許容される時間を決めるのはユーザーの責任です。

まとめ

この PowerShell の使用例で重要なのは、Measure-CommandRestart-ComputerStart-RSJob です。これらを組み合わせることで、複雑なコーディングをしなくても、このタスクを非常に効率的かつ簡単に実行できます。組み込みの PowerShell モジュールとコミュニティモジュールをスクリプトに利用することで、関数を作成する時間が大幅に節約できました。

「ワークフロー自動化で効率と活性を引き出す5つのポイント」をダウンロード

Topics: IT insights

Default HTML block

コメントをどうぞ

メールアドレスは公開されません。アスタリスクマーク*のついたフィールドは必須項目です。

THIS POST WAS WRITTEN BY Dan Franciscus

Dan Franciscus is a systems engineer and VMware Certified Professional (VCP) specializing in VMware, PowerShell, and other Microsoft-based technologies. You can reach Dan at his blog (http://www.winsysblog.com/) or Twitter at @dan_franciscus.

無料試用版

無料試用版をお気軽にお試しください。

無料試用版を試す

コンタクト

ご質問、ご意見をお寄せください。

連絡先

ブログの定期メール便

ブログを定期的にメール配信いたします。