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

投稿者: Dan Franciscus 投稿日: 2019年9月11

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

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

Measure-RebootTime コマンド

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

Get-RebootTime 関数自体は非常にシンプルです。測定には Measure-Command を使います。Restart-Computer を使用して、リモート接続で PowerShell(WMI)が使用可能になるのを待ちます。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-Command、Restart-Computer、Start-RSJob です。これらを組み合わせることで、複雑なコーディングをしなくても、このタスクを非常に効率的かつ簡単に実行できます。組み込みの PowerShell モジュールとコミュニティモジュールをスクリプトに利用することで、関数を作成する時間が大幅に節約できました。


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.
著者が作成したブログ

関連タグ

関連記事

何百ものサーバーからの Windows イベントログを検索する方法
トラブルシューティングや潜在的なセキュリティ侵害の調査を開始するときは、取り掛かりとして、まず Windows のイベントログをチェックすることが多いと思います。
MOVEit 2018 の REST API で PowerShell を使う
MOVEit の利用形態として、MOVEit コンソールや Web インタフェースからログインして日々の管理業務を行ったり、1回限りのワークフローを設定して操作する作業は理にかなっており、首尾よくいきます。一方、MOVEit Automation の自動化を活用したいケースもあります。
Prefooter Dots
Subscribe Icon

Latest Stories in Your Inbox

Subscribe to get all the news, info and tutorials you need to build better business apps and sites

The specified form no longer exists or is currently unpublished.