スクリプトタスクを使用してログオン時間を分析する

最終公開日 : Nov 13, 2026
ログオン時間が長いと、ユーザーの生産性が低下し、ユーザーエクスペリエンスが損なわれます。管理者として、ログオン時間の詳細な概要を把握し、ログオンを遅くしているプロセスを特定して、それに応じて是正措置を講じたいと考えるかもしれません。
この目標を達成するには、スクリプト analyzeLogonDuration.ps1 を使用できます。これは、ログオンプロセスに関連するすべての主要なイベントについてイベントログを照会するPowerShellスクリプトです。このスクリプトには、次のような利点があります。
  • ユーザーの最新のログオンのログオン時間の内訳を提供します。
  • ログオンプロセスのすべての主要な連続フェーズを表示し、どのフェーズがログオンを遅くしているかを簡単に確認できるようにします。
  • あるフェーズの終了と次のフェーズの開始の間に遅延があるかどうかを確認できます。
その他の利点については、<https://www.controlup.com/script-library-posts/analyze-logon-duration/> を参照してください。
Workspace Environment Management™ (WEM) には、スクリプトの実行を自動化するスクリプトタスク機能が用意されています。スクリプトタスクを構成するだけで済みます。一般的なワークフローは次のとおりです。
  1. 関連するスクリプトを準備します。
  2. スクリプトタスクにフルアクセスが許可されている場合、スクリプトの署名は必須です。
  3. スクリプトタスクを追加します。
  4. スクリプトタスクを構成します。
  5. タスク実行レポートを表示します。

関連するスクリプトを準備する

次の2つのスクリプトを含むzipファイルを準備します。
スクリプトを含むZipファイル(/en-us/workspace-environment-management/service/media/1-relevant-scripts.png)
  • analyzeLogonDuration.ps1。このスクリプトは<https://www.controlup.com/script-library-posts/analyze-logon-duration/>から入手できます。
  • runLogonDuration.ps1。ログオン期間スクリプトはドメイン名とユーザー名を必要とするため、ドメイン名とユーザー名を渡すためのラッパースクリプトを提供しています。例えば、サービスアカウントでドメイン名とユーザー名を取得する方法を提供しています。ただし、このラッパースクリプトには1つのユーザーセッションが必要です。
この例では、スクリプトrunLogonDuration.ps1には以下の内容が含まれています。
$User = tasklist /v /FI "IMAGENAME eq explorer.exe" /FO list | find "User Name:"
$User = $User.Substring(14)
$UserName = $User.Split("\")[1]
$DomainUser = "$env:userdomain\$UserName"
&.\analyzeLogonDuration.ps1  -DomainUser $DomainUser

スクリプトに署名する

スクリプト化されたタスクはフルアクセスで実行する必要があります。エントリポイントスクリプトに署名を追加する必要があります: runLogonDuration.ps1。公式の証明書を使用することをお勧めします。公式の証明書をお持ちの場合は、ステップ1からステップ3までをスキップできます。証明書をお持ちでない場合は、テスト用に自己署名SSL証明書のみを使用できます。自己署名SSL証明書は、通常は信頼できるSSL証明書会社であるサードパーティ機関からの検証がないため、危険です。

ステップ1: 自己署名証明書を作成する

  1. PowerShellを管理者として開きます。スタートボタンを右クリックし、Windows PowerShell (Admin)またはWindows Terminal (Admin)を選択します。
  2. New-SelfSignedCertificateコマンドレットを使用して自己署名証明書を作成します。証明書の名前(フレンドリ名)、有効期間、および使用法(KeyUsage)などのパラメーターを指定します。
$cert = New-SelfSignedCertificate -Type CodeSigningCert -DnsName "MyTestCertificate.com" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter (Get-Date).AddYears(10) -KeyUsage DigitalSignature -FriendlyName "MyTestCertificate"
このコマンドは、1年間の有効期間を持つ新しい証明書を作成し、MyTestCertificateとしてラベル付けします。この証明書は、ローカルマシンの個人ストアに保存されます。
証明書が正常に作成されると、以下の詳細が表示されます。
証明書を作成(/en-us/workspace-environment-management/service/media/2-echo-cert.png)

ステップ2: 自己署名証明書をエクスポートする

必要に応じて、秘密鍵とともに証明書をエクスポートします。署名に証明書を使用するには、秘密鍵とともにエクスポートする必要があります。これは、別のマシンで証明書を使用したり、鍵を保護したりするために不可欠です。次のコマンドを実行します。
$pwd = ConvertTo-SecureString -String "YourStrongPassword" -Force -AsPlainText
Export-PfxCertificate -cert $cert -FilePath "C:\MyTestCertificate.pfx" -Password $pwd
YourStrongPasswordを任意の強力なパスワードに置き換えます。このコマンドは、秘密鍵を含む証明書を.pfxファイルにエクスポートします。

ステップ 3: 証明書をインストールする

証明書をすでにエクスポートしており、同じマシンまたは別のマシンにインストールする必要がある場合は、証明書ストアにインポートし直すことができます。*.pfx ファイルをターゲットマシンにコピーし、Import-PfxCertificate コマンドレットを使用します。
$pwd = ConvertTo-SecureString -String "YourStrongPassword" -Force -AsPlainText

Import-PfxCertificate -FilePath "C:\MyTestCertificate.pfx" -CertStoreLocation "Cert:\LocalMachine\Root" -Password $pwd

ステップ 4: 証明書を使用してファイルに署名する

公式の証明書を使用する場合は、適切な CN 値を入力する必要があります。この例では、MyTestCertificate.com を使用します。証明書を見つけるには、次のコマンドレットを使用します。
$cert = ls Cert:\LocalMachine\Root| where {$_.subject -eq CN=MyTestCertificate.com"}
Set-AuthenticodeSignature コマンドレットを使用して、PowerShell スクリプトまたはデジタル署名をサポートするその他のファイルに署名します。
Set-AuthenticodeSignature -FilePath "C:\logonDuration\runLogonDuration.ps1" $cert -IncludeChain all -HashAlgorithm SHA1 -TimestampServer http://timestamp.digicert.com
このコマンドは、以前に作成した証明書を使用して runLogonDuration.ps1 にデジタル署名を適用します。

ステップ 5: 署名を検証する

ファイルが正しく署名されていることを確認するには、次のコマンドを使用できます。
Get-AuthenticodeSignature -FilePath "C:\logonDuration\runLogonDuration.ps1"
スクリプトの署名が有効な場合、次の詳細が表示されます。
有効なスクリプト署名

スクリプトタスクを追加する

以下の情報は、スクリプトタスクを追加する のガイダンスを補足するものです。ログオン期間を分析するタスクを作成するには、その記事の一般的なガイダンスに従い、以下の詳細に注意してください。
Web コンソール > スクリプトタスクで、次のようにタスクを追加します。
スクリプトタスクを追加する
  • ファイルの種類には、ZIP を選択します。
  • 以下の2つのスクリプトを含むzipファイルを作成します。
    • analyzeLogonDuration.ps1
    • runLogonDuration.ps1
  • zipファイルを参照してアップロードし、スクリプト runLogonDuration.ps1 をエントリポイントとして設定します。
  • 「アクセス許可の付与」オプションは、セキュリティリスクをもたらす可能性のある信頼できないスクリプトからの攻撃から保護するために、追加のセキュリティ層を追加するように設計されています。Analyze_Logon_Durationタスクは、フルアクセスで実行する必要があります。

スクリプトタスクを構成する

以下の情報は、スクリプトタスクの構成 のガイダンスを補足するものです。Analyze_Logon_Durationタスクを構成するには、その記事の一般的なガイダンスに従い、以下の詳細に注意してください。
  1. 関連する構成セットに移動し、Scripted Task Settings に移動して、General でAnalyze_Logon_Durationタスクを次のように構成します。
    • WEMでは、タスクを実行する前に署名を検証するかどうかを決定できます。スクリプトタスクにフルアクセスが許可されている場合、署名検証は必須です。これにより、スクリプトが侵害されるのを防ぎ、セキュリティが確保されます。Filter と Task timeout の設定はオプションです。
    全般でスクリプトタスクを構成する
  2. Triggers で、タスクのトリガーを構成します。
    トリガーでスクリプトタスクを構成する
    • トリガーを使用して、タスクを実行するタイミングを制御します。たとえば、「スケジュール済み」トリガーを作成してタスクの実行をスケジュールし、そのトリガーをタスクに関連付けることができます。
  3. Parameters で、タスクにパラメータを渡すかどうかを選択します。この例では、この手順をスキップできます。
  4. Output で、次のように設定を構成します。正規表現の値を設定します。
    ((?<Key>[a-zA-Z]+\s+)+(?<value>\d+.\d+)\s)出力でスクリプトタスクを構成する

タスク実行レポートを表示する

タスクが正常に実行された後、レポートを確認して結果を表示できます。詳細については、「レポート」を参照してください。この例では、次のレポートが表示されます。
レポートの例
フィルターを使用して、関連するレポートに表示を絞り込み、エクスポートできます。レポートのエクスポートについては、「レポートのエクスポート」を参照してください。エクスポートされたデータに基づいて、さらに分析を実行できます。
以下は、Power BI で関心のあるデータを視覚化した例です。ユーザーのログオン時間の内訳を示しています。
データ視覚化の例
ヒント:
ログオンパフォーマンスの最適化は、Workspace Environment Management サービスのハイライトの1つです。この機能は、ログオンプロセス全体を変更して、ログオン時間を大幅に短縮できます。「ログオンの最適化」を参照してください。