次の方法で共有


Intune で Windows デバイスで PowerShell スクリプトを使用する

2025 年 10 月 14 日、Windows 10サポート終了に達し、品質と機能の更新プログラムを受け取りません。 Windows 10は、Intune で許可されているバージョンです。 このバージョンを実行しているデバイスは引き続き Intune に登録し、対象となる機能を使用できますが、機能は保証されないため、異なる場合があります。

Intune に PowerShell スクリプトをアップロードするには、Microsoft Intune 管理拡張機能を使用します。 次に、Windows デバイスでこれらのスクリプトを実行します。 管理拡張機能により MDM が強化され、最新の管理に簡単に移行できるようになります。

注:

Windows の Intune 管理拡張機能の詳細については、「Windows 用 Intune 管理拡張機能」を参照してください。

開始する前に

  • 管理者権限を持つユーザー コンテキストに設定されたスクリプトは、既定で管理者特権で PowerShell を実行します。

  • エンド ユーザーは、PowerShell スクリプトを実行するためにデバイスにサインインする必要はありません。

  • Intune 管理拡張機能は、再起動するたびに新しいスクリプトまたは変更を確認します。 Microsoft Entra グループにポリシーを割り当てると、PowerShell スクリプトが実行され、実行結果が報告されます。 スクリプトは一度実行されると、スクリプトまたはポリシーに変更が発生するまで、再実行されません。 スクリプトが失敗した場合、Intune 管理拡張機能は、次の 3 つの連続する Intune 管理拡張機能のチェックに対してスクリプトを 3 回再試行します。

  • デバイスに割り当てられた PowerShell スクリプトは、ユーザーのチェックが無効になっているマルチセッション SKU を除き、サインインするすべての新しいユーザーに対して実行されます。

  • PowerShell スクリプトは、Win32 アプリの実行前に実行されます。 つまり、PowerShell スクリプトは最初に実行されます。 次に、Win32 アプリが実行されます。

  • PowerShell スクリプトは 30 分後にタイムアウトになります。

重要

PowerShell スクリプトと修復スクリプトを使用する場合のプライバシー認識のベスト プラクティスは次のとおりです。

  • スクリプト (パスワードなど) に機密情報の種類を含めないでください
  • スクリプトに個人データを含めない
  • スクリプトを使用してデバイスから個人データを収集しない
  • 常にプライバシーに関するベスト プラクティスに従う

関連情報については、「 修復」を参照してください。

前提条件

  • PowerShell スクリプト アプリがユーザーまたはデバイスに割り当てられると、Intune 管理拡張機能が自動的にインストールされます。 詳細については、「 Windows 用 Intune 管理拡張機能」を参照してください。

重要

Intune 管理拡張機能を実行しているクライアントに展開されたスクリプトは、デバイスのシステム クロックが月または年によって非常に古い場合に実行できません。 システム クロックが最新の状態になると、スクリプトは期待どおりに実行されます。

スクリプト ポリシーを作成して割り当てる

  1. Microsoft Intune 管理センターにサインインします。

  2. [デバイス>スクリプトと修復>Platform スクリプト>追加>Windows 10 以降を選択します。

    Windows デバイスの新しいスクリプトの作成を示すスクリーンショット。

  3. [基本] で、次のプロパティを入力し、[次へ] を選択します。

    • 名前: PowerShell スクリプトの名前を入力します。
    • 説明: PowerShell スクリプトの説明を入力します。 この設定は省略可能ですが、推奨されます。
  4. [スクリプト設定] で、次のプロパティを入力し、[次へ] を選択します。

    • スクリプトの場所: PowerShell スクリプトを参照します。 スクリプトは 200 KB (ASCII) 未満とする必要があります。

    • ログオンした資格情報を使用してこのスクリプトを実行する: [ はい ] (既定値) を選択して、デバイス上でユーザーの資格情報を使用してスクリプトを実行します。 [ いいえ ] を選択して、システム コンテキストでスクリプトを実行します。 管理者の多くは、[はい] を選択します。 システム コンテキストでスクリプトを実行する必要がある場合は、[いいえ] を選択します。

    • スクリプト署名チェックを適用する: 信頼できる発行元がスクリプトに署名する必要がある場合は、[はい] (既定値) を選択します。 スクリプトに署名する要件がない場合は、[ いいえ ] を選択します。

    • 64 ビット PowerShell ホストでスクリプトを実行する: [はい] を選択して、64 ビット のクライアント アーキテクチャ上の 64 ビット PowerShell ホストでスクリプトを実行します。 [いいえ] (既定値) を選択すると、32 ビット PowerShell ホストでスクリプトが実行されます。

      [はい] または [いいえ] に設定する場合は、次の表を使用して新しいポリシー動作と既存のポリシー動作を確認してください。

      64 ビットのホストでスクリプトを実行する クライアント アーキテクチャ 新しいスクリプト 既存のポリシー スクリプト
      いいえ 32 ビット 32 ビットの PowerShell ホストがサポートされています。 32 ビットおよび 64 ビットのアーキテクチャで動作する 32 ビット PowerShell ホストでのみ実行されます。
      はい 64 ビット 64 ビット アーキテクチャ用の 64 ビットの PowerShell ホストでスクリプトが実行されます。 32 ビット上で実行した場合、スクリプトは 32 ビットの PowerShell ホストで実行されます。 32 ビットの PowerShell ホストでスクリプトが実行されます。 この設定が 64 ビットに変更されると、スクリプトは 64 ビットの PowerShell ホストで開き (実行されない)、スクリプトから結果がレポートされます。 32 ビット上で実行した場合、スクリプトは 32 ビットの PowerShell ホストで実行されます。
  5. [スコープ タグ] を選択します。 スコープ タグは省略可能です。 分散 IT にロールベースのアクセス制御とスコープ タグを使用すると 、詳細情報が表示されます。

    スコープ タグを追加するには、次のようにします。

    • [スコープ タグの選択] を選択>一覧から既存のスコープ タグを選択>選択します

    • 完了したら、[次へ] を選択します。

  6. [割り当て]>[含めるグループを選択] の順に選択します。 Microsoft Entra グループの既存の一覧が表示されます。

    • スクリプトを受信するデバイスを持つユーザーが属する 1 つまたは複数のグループを選択します。 [選択] を選択します。 選択したグループが一覧に表示され、ポリシーを受け取ります。

      注:

      Intune の PowerShell スクリプトは、デバイス セキュリティ グループをMicrosoft Entraするか、ユーザー セキュリティ グループMicrosoft Entra対象にすることができます。 ただし、Workplace joined (WPJ) デバイスをターゲットにする場合は、Microsoft Entraデバイス セキュリティ グループのみを使用できます (ユーザー のターゲット設定は無視されます)。

    • [次へ] を選択します。

      Microsoft Intune で、PowerShell スクリプトをデバイス グループに割り当てる、またはデプロイする

  7. [確認 + 追加] で、構成した設定の概要が表示されます。 [追加] を選択してスクリプトを保存します。 [追加] を選択すると、選択したグループにポリシーが展開されます。

シナリオ - スクリプトの実行に失敗する

午前 8 時

  • チェックイン
  • スクリプト ConfigScript01 を実行
  • スクリプト失敗

午前 9 時

  • チェックイン
  • スクリプト ConfigScript01 を実行
  • スクリプト失敗 (再試行回数 = 1)

午前 10 時

  • チェックイン
  • スクリプト ConfigScript01 を実行
  • スクリプト失敗 (再試行回数 = 2)

午前 11 時

  • チェックイン
  • スクリプト ConfigScript01 を実行
  • スクリプト失敗 (再試行回数 = 3)

午後 12 時

  • チェックイン
  • ConfigScript01スクリプトを実行するその他の試行は行われません。
  • スクリプトに対して他の変更が行われなかった場合、スクリプトの実行を試みるその他の試行は行われません。

実行状態を監視する

ポータルでユーザーとデバイスの PowerShell スクリプトの実行状態を監視できます。

[PowerShell スクリプト] で、監視するスクリプトを選択し、[監視] を選択し、次のいずれかのレポートを選択します。

  • デバイスの状態
  • ユーザーの状態

注:

プラットフォーム スクリプトの Intune 管理センターからのデバイス状態のエクスポートで Intune Export API が使用され、CSV 列名が API スキーマと一致するようになりました。

スクリプトを削除する

PowerShell スクリプトで、スクリプトを右クリックし、[削除] を選択します。

一般的な問題と解決策

問題: PowerShell スクリプトが実行されない

考えられる解決策:

  • PowerShell スクリプトは、サインインのたびには実行されません。 次の場合に実行されます。

    • スクリプトがデバイスに割り当てられるとき

    • スクリプトを変更し、アップロードし、ユーザーまたはデバイスにそのスクリプトを割り当てるとき

      ヒント

      Microsoft Intune 管理拡張機能はサービス アプリ (services.msc) に表示されているその他のサービスと同様、デバイスで実行されるサービスです。 デバイスの再起動後、このサービスは再起動され、Intune サービスで割り当てられた PowerShell スクリプトに対してチェックされる場合があります。 Microsoft Intune 管理拡張機能サービスが [手動] に設定されている場合、デバイスの再起動後にサービスが再起動されない可能性があります。

  • デバイスが Microsoft Entra ID に参加していることを確認します。 Microsoft Entra ID で職場またはorganizationにのみ登録されているデバイスは、スクリプトを受け取りません。

  • Intune 管理拡張機能が %ProgramFiles(x86)%\Microsoft Intune Management Extension にダウンロードされていることを確認します。

  • スクリプトは、Surface Hubs または Windows で S モードでは実行されません。

  • ログでエラーを確認します。 「Intune 管理拡張機能のログ」 (この記事内) を参照してください。

  • アクセス許可の問題の可能性がある場合は、PowerShell スクリプトのプロパティが Run this script using the logged on credentials に設定されていることを確認します。 また、サインインしているユーザーがスクリプトを実行するための適切なアクセス許可を持っていることも確認します。

  • スクリプトに関する問題を分離するには、次の操作を行います。

    • デバイスの PowerShell の実行構成を確認します。 PowerShell の実行ポリシーについて、ガイダンスを参照してください。

    • Intune 管理拡張機能を使用するサンプル スクリプトを実行します。 たとえば、C:\Scripts ディレクトリを作成し、すべてのユーザーにフル コントロールを付与します。 次のスクリプトを実行します。

      write-output "Script worked" | out-file c:\Scripts\output.txt
      

      成功すると、output.txt が作成されて、"Script worked" というテキストが含まれるはずです。

    • Intune なしでスクリプトの実行をテストするには、psexec ツールをローカル環境で使用し、システム アカウントでスクリプトを実行します。

      psexec -i -s

    • スクリプトが成功したと報告したが、実際には成功しなかった場合は、ウイルス対策サービスが AgentExecutor をサンドボックス化している可能性があります。 次のスクリプトでは、常に Intune のエラーが報告されます。 テストとして、次のスクリプトを使用できます。

      Write-Error -Message "Forced Fail" -Category OperationStopped
      mkdir "c:\temp"
      echo "Forced Fail" | out-file c:\temp\Fail.txt
      

      スクリプトで成功が報告された場合は、AgentExecutor.log を参照してエラー出力を確認します。 スクリプトを実行する場合、長さは >2 にする必要があります。

    • .error ファイルと .output ファイルをキャプチャするには、次のスニペットを使用して、AgentExecutor を通じて PowerShell x86 (C:\Windows\SysWOW64\WindowsPowerShell\v1.0) にスクリプトを実行します。 これにより、確認のためのログが保持されます。 Intune 管理拡張機能では、スクリプトの実行後にログがクリーンアップされることに注意してください。

      $scriptPath = read-host "Enter the path to the script file to execute"
      $logFolder = read-host "Enter the path to a folder to output the logs to"
      $outputPath = $logFolder+"\output.output"
      $errorPath =  $logFolder+"\error.error"
      $timeoutPath =  $logFolder+"\timeout.timeout"
      $timeoutVal = 60000
      $PSFolder = "C:\Windows\SysWOW64\WindowsPowerShell\v1.0"
      $AgentExec = "C:\Program Files (x86)\Microsoft Intune Management Extension\agentexecutor.exe"
      &$AgentExec -powershell  $scriptPath $outputPath $errorPath $timeoutPath $timeoutVal $PSFolder 0 0
      

問題: Windows が管理されなくなった場合でもスクリプトが実行されるのはなぜですか?

割り当てられたスクリプトを持つ Windows デバイスが管理されなくなった場合、IME はすぐには削除されません。 IME は、次の IME チェックイン (通常は 8 時間ごと) で Windows が管理されていないことを検出し、スクリプトの実行を取り消します。 その間、ローカルに格納されたスクリプトを実行できます。 IME がチェックできない場合は、最大 24 時間 (デバイスの起動時間) のチェックインを再試行し、Windows デバイスからそれ自体を削除します。

次の手順

プロファイルを監視してトラブルシューティングします。