Configuration Manager コンソールから PowerShell スクリプトを作成して実行する

Configuration Manager (現在のブランチ) に適用

Configuration Manager には、PowerShell スクリプトを実行するための統合機能があります。 PowerShell には、理解され、より大きなコミュニティと共有される洗練された自動化されたスクリプトを作成するという利点があります。 スクリプトを使用すると、ソフトウェアを管理するためのカスタム ツールの構築が簡素化され、日常的なタスクを迅速に実行できるため、大規模なジョブをより簡単かつ一貫して実行できます。

注:

バージョン 2006 以前では、Configuration Manager はこのオプション機能を既定で有効にしません。 この機能は、使用する前に有効にする必要があります。 詳細については、「 更新プログラムからオプション機能を有効にする」を参照してください。

Configuration Manager でのこの統合を使用すると、スクリプトの実行機能を使用して次の操作を実行できます。

  • Configuration Manager で使用するスクリプトを作成および編集します。
  • ロールとセキュリティ スコープを通じてスクリプトの使用状況を管理します。
  • スクリプトのフォルダー サポート。
  • コレクションまたは個々のオンプレミス管理 Windows PC でスクリプトを実行します。
  • コレクションまたは個々のオンプレミス管理 Windows PC でスクリプトの実行時間を UTC でスケジュールします。
  • クライアント デバイスからスクリプト結果を迅速に集約します。
  • スクリプトの実行を監視し、スクリプト出力からのレポート結果を表示します。

警告

  • スクリプトの力を考えると、意図的かつ慎重に使用することをお勧めします。 私たちはあなたを支援するために追加の安全対策を組み込んでいます。分離されたロールとスコープ。 意図しないスクリプトが実行されないように、スクリプトを実行する前に必ずスクリプトの正確性を検証し、信頼できるソースからのものであることを確認してください。 拡張文字やその他の難読化に注意し、スクリプトのセキュリティ保護について学んでください。 PowerShell スクリプトのセキュリティの詳細情報
  • 特定のマルウェア対策ソフトウェアによって、Configuration Manager の実行スクリプトまたは CMPivot 機能に対してイベントが誤ってトリガーされることがあります。 マルウェア対策ソフトウェアが干渉することなくこれらの機能を実行できるように、%windir%\CCM\ScriptStore を除外することをお勧めします。

前提条件

  • PowerShell スクリプトを実行するには、クライアントで PowerShell バージョン 3.0 以降を実行している必要があります。 ただし、実行するスクリプトに新しいバージョンの PowerShell の機能が含まれている場合は、スクリプトを実行するクライアントがそのバージョンの PowerShell を実行している必要があります。
  • スクリプトを実行するには、Configuration Manager クライアントが 1706 リリース以降のクライアントを実行している必要があります。
  • スクリプトを使用するには、適切な Configuration Manager のセキュリティ ロールのメンバーである必要があります。
  • スクリプトをインポートして作成するには - アカウントに SMS スクリプトの作成アクセス許可が必要です。
  • スクリプトを承認または拒否するには - アカウントに SMS スクリプト承認アクセス許可が必要です。
  • スクリプトを実行するには - アカウントにコレクションスクリプト実行アクセス許可が必要です。

Configuration Managerセキュリティ ロールの詳細については、「
実行スクリプトのセキュリティ スコープ
実行スクリプトのセキュリティ ロール
ロールベースの管理の基礎」を参照してください。

制限事項

スクリプトの実行では現在、次のものがサポートされています。

  • スクリプト言語: PowerShell
  • パラメーターの種類: 整数、文字列、およびリスト。

警告

パラメーターを使用すると、PowerShell インジェクション攻撃のリスクにさらされる可能性があることに注意してください。 正規表現を使用してパラメーター入力を検証したり、定義済みのパラメーターを使用したりするなど、さまざまな緩和および回避方法があります。 一般的なベスト プラクティスは、PowerShell スクリプトにシークレットを含めないこと (パスワードを使用しないなど) することです。 PowerShell スクリプトのセキュリティに関する詳細情報

スクリプトの作成者と承認者の実行

スクリプトの実行では、 スクリプトの作成 者と スクリプト承認者の 概念が、スクリプトの実装と実行に別々のロールとして使用されます。 作成者ロールと承認者ロールを分離すると、スクリプトの実行という強力なツールの重要なプロセス チェックが可能になります。 スクリプトの実行は許可するが、スクリプトの作成や承認は許可しない追加の スクリプト ランナー ロールがあります。 スクリプト のセキュリティ・ロールの作成を参照してください。

スクリプト ロール コントロール

既定では、ユーザーは自分が作成したスクリプトを承認できません。 スクリプトは強力で汎用性が高く、多くのデバイスに展開される可能性があるため、スクリプトの作成者とスクリプトを承認するユーザーのロールを分離できます。 これらの役割により、監視なしでスクリプトを実行することに対する追加のセキュリティ レベルが提供されます。 テストを簡単にするために、二次承認をオフにすることができます。

スクリプトを承認または拒否する

スクリプトを実行するには、 スクリプト承認者 ロールによって承認される必要があります。 スクリプトを承認するには:

  1. Configuration Manager コンソールで、[ソフトウェア ライブラリ] をクリックします。
  2. ソフトウェア・ライブラリ」 ワークスペースで、「 スクリプト」をクリックします。
  3. [ スクリプト] ボックスの一覧で、承認または拒否するスクリプトを選択し、[ ホーム ] タブの [ スクリプト ] グループで [ 承認/拒否] をクリックします。
  4. [スクリプトの 承認または拒否] ダイアログ ボックスで、スクリプトに対して [ 承認] または [拒否] を選択します。 必要に応じて、決定に関するコメントを入力します。 スクリプトを拒否すると、クライアント デバイスで実行できなくなります。
    スクリプト - 承認
  5. ウィザードを終了します。 [ スクリプト] ボックスの一覧では、実行したアクションに応じて [承認状態 ] 列が変更されます。

ユーザーが自分のスクリプトを承認できるようにする

この承認は、主にスクリプト開発のテスト フェーズで使用されます。

  1. Configuration Manager コンソールで、[管理] をクリックします。
  2. [管理] ワークスペースで、[サイトの構成] を展開し、[サイト] をクリックします。
  3. サイトの一覧で、自分のサイトを選択し、[ ホーム ] タブの [サイト ] グループで [階層の設定] をクリックします。
  4. [階層設定プロパティ] ダイアログ ボックスの [全般] タブで、[スクリプトの作成者に追加のスクリプト承認者が必要] チェック ボックスをオフにします。

重要

ベスト プラクティスとしては、スクリプト作成者が自分のスクリプトを承認できないようにしないでください。 ラボの設定でのみ許可する必要があります。 運用環境でこの設定を変更した場合の潜在的な影響を慎重に検討してください。

セキュリティ スコープ

スクリプトの実行では、Configuration Manager の既存の機能であるセキュリティ スコープを使用して、ユーザー グループを表すタグを割り当てることでスクリプトの作成と実行を制御します。 セキュリティ スコープの使用の詳細については、「Configuration Manager の役割ベースの管理を構成する」を参照してください。

スクリプトのセキュリティ ロールの作成

スクリプトの実行に使用される 3 つのセキュリティ ロールは、既定では Configuration Manager に作成されません。 スクリプト実行者、スクリプト作成者、スクリプト承認者のロールを作成するには、次に示す手順に従います。

  1. Configuration Manager コンソールで、[管理]>[セキュリティ]>[セキュリティ ロール] に移動します。
  2. ロールを右クリックし、[ コピー] をクリックします。 コピーするロールには、既にアクセス許可が割り当てられています。 必要なアクセス許可のみを取得してください。
  3. カスタム ロールに NameDescription を指定します。
  4. 以下に示すアクセス許可を、セキュリティ ロールに割り当てます。

セキュリティ ロールのアクセス許可

ロール名: スクリプト ランナー

  • 説明: これらのアクセス許可により、このロールは、以前に作成され、他の役割によって承認されたスクリプトのみを実行できます。
  • アクセス許可: 次の項目が [はい] に設定されていることを確認します。
カテゴリ アクセス許可 状態
コレクション スクリプトの実行 はい
サイト 読み取り はい
SMS スクリプト 読み取り はい

ロール名: スクリプト作成者

  • 説明: これらのアクセス許可により、このロールはスクリプトを作成できますが、スクリプトを承認または実行することはできません。
  • アクセス許可: 次のアクセス許可が設定されていることを確認します。
カテゴリ アクセス許可 状態
コレクション スクリプトの実行 不要
サイト 読み取り はい
SMS スクリプト Create はい
SMS スクリプト 読み取り はい
SMS スクリプト 削除 はい
SMS スクリプト 変更 はい

ロール名: スクリプト承認者

  • 説明: これらのアクセス許可により、このロールはスクリプトを承認できますが、スクリプトを作成または実行することはできません。
  • アクセス許可: 次のアクセス許可が設定されていることを確認します。
カテゴリ アクセス許可 状態
コレクション スクリプトの実行 不要
サイト 読み取り はい
SMS スクリプト 読み取り はい
SMS スクリプト 承認する はい
SMS スクリプト 変更 はい

スクリプト作成者ロールの SMS スクリプト アクセス許可の例

スクリプト作成者ロールの SMS スクリプト アクセス許可の例

スクリプトのフォルダー サポート

バージョン 2403 以降では、フォルダーを使用してスクリプトを整理できます。 この変更により、スクリプトの分類と管理が向上します。

Configuration Manager コンソールを開き、ソフトウェア ライブラリ ワークスペースに移動します。 リボンまたは右クリック メニューの [スクリプト] で、次のオプションから選択します。

  • フォルダーの作成
  • フォルダーの削除
  • フォルダー名の変更
  • フォルダーの移動
  • セキュリティ スコープの設定

台本を作成する

  1. Configuration Manager コンソールで、[ソフトウェア ライブラリ] をクリックします。
  2. ソフトウェア・ライブラリ」 ワークスペースで、「 スクリプト」をクリックします。
  3. [ ホーム] タブの [ 作成 ] グループで、[ スクリプトの作成] をクリックします。
  4. スクリプトの作成ウィザードの [スクリプト] ページで、次の設定を行います。
    • [スクリプト名] - スクリプトの名前を入力します。 同じ名前のスクリプトを複数作成できますが、重複する名前を使用すると、Configuration Manager コンソールで必要なスクリプトを見つけるのが難しくなります。
    • スクリプト言語 - 現在、PowerShell スクリプトのみがサポートされています。
    • インポート - PowerShell スクリプトをコンソールにインポートします。 スクリプトが [スクリプト] フィールドに表示されます。
    • クリア - 現在のスクリプトを [スクリプト] フィールドから削除します。
    • スクリプト - 現在インポートされているスクリプトを表示します。 必要に応じて、このフィールドでスクリプトを編集できます。
  5. ウィザードを終了します。 新しいスクリプトが [スクリプト] リストに表示され、状態が [承認待ち] になります。 このスクリプトをクライアント デバイスで実行するには、事前に承認する必要があります。

重要

スクリプトの実行機能を使用するときは、デバイスの再起動や Configuration Manager エージェントの再起動をスクリプト化しないでください。 再起動状態が継続的に発生する可能性があります。 必要に応じて、デバイスの再起動を有効にするクライアント通知機能の拡張機能があります。 [ 再起動保留中] 列 は、再起動が必要なデバイスを識別するのに役立ちます。

スクリプト パラメーター

スクリプトにパラメーターを追加すると、作業の柔軟性が向上します。 最大 10 個のパラメーターを指定できます。 以下に、スクリプト パラメーターを含むスクリプトの実行機能の現在の機能の概要を示します。 文字列整数 のデータ型。 プリセット値の一覧も使用できます。 スクリプトにサポートされていないデータ型が含まれている場合は、警告が表示されます。

スクリプトの作成」ダイアログで、「スクリプト」の下の「スクリプト・パラメータ」をクリックします。

スクリプトの各パラメーターには、詳細と検証を追加するための独自のダイアログがあります。 スクリプトに既定のパラメーターがある場合は、パラメーター UI で列挙され、それを設定できます。 Configuration Manager はスクリプトを直接変更しないため、既定値を上書きしません。 これは UI で "事前設定された推奨値" が提供されていると考えることができますが、Configuration Manager は実行時に "既定" 値へのアクセスを提供しません。 これは、正しい既定値を持つようにスクリプトを編集することで回避できます。

重要

パラメーター値に単一引用符を含めることはできません。

単一引用符を含む、または単一引用符で囲まれたパラメーター値がスクリプトに適切に渡されないという既知の問題があります。 スクリプト内にスペースを含む既定のパラメーター値を指定する場合は、代わりに二重引用符を使用します。 スクリプトの作成または実行中に既定のパラメータ値を指定する場合、値にスペースが含まれているかどうかに関係なく、既定値を二重引用符または単一引用符で囲む必要はありません。

パラメーターの検証

スクリプト内の各パラメーターには、そのパラメーターの検証を追加するための [スクリプト パラメーターのプロパティ] ダイアログがあります。 検証を追加した後、検証を満たさないパラメーターの値を入力するとエラーが発生します。

例: FirstName

この例では、文字列パラメーター FirstName のプロパティを設定することができます。

スクリプト パラメーター - 文字列

[ スクリプト パラメーターのプロパティ ] ダイアログの [検証] セクションには、次のフィールドが含まれています。

  • 最小長 - [名] フィールドの最小文字数。
  • 最大文字数 - [名] フィールドの最大文字数
  • 正規表現 - 正規表現の略です。 正規表現の使用の詳細については、次のセクション「 正規表現の検証の使用」を参照してください。
  • カスタム エラー - システム検証エラー メッセージに取って代わる独自のカスタム エラー メッセージを追加する場合に便利です。

正規表現の検証の使用

正規表現は、文字列をエンコードされた検証に対してチェックするためのコンパクトなプログラミング形式です。 たとえば、[正則辞] フィールドに [^A-Z] を配置することで、[名] フィールドにアルファベット大文字が含まれていないことをチェックできます。

このダイアログの正規表現処理は、.NET Framework によりサポートされています。 正規表現の使用に関するガイダンスについては、「 .NET 正規表現正規表現言語」を参照してください。

スクリプト例

この機能で使用できるスクリプトを示す例をいくつか次に示します。

新しいフォルダーとファイルを作成する

このスクリプトは、名前付け入力に基づいて、新しいフォルダーとそのフォルダー内にファイルを作成します。

Param(
[Parameter(Mandatory=$True)]
[string]$FolderName,
[Parameter(Mandatory=$True)]
[string]$FileName
)

New-Item $FolderName -type directory
New-Item $FileName -type file

OS バージョンの取得

このスクリプトは、WMI を使用してマシンの OS バージョンを照会します。

Write-Output (Get-WmiObject -Class Win32_operatingSystem).Caption

PowerShell スクリプトの編集またはコピー

スクリプトの実行機能で使用される既存の PowerShell スクリプトを編集またはコピーできます。 変更が必要なスクリプトを再作成する代わりに、直接編集します。 どちらの操作でも、新しいスクリプトを作成するときと同じウィザード エクスペリエンスを使用します。 スクリプトを編集またはコピーしても、Configuration Manager は承認状態を保持しません。

ヒント

クライアントでアクティブに実行されているスクリプトは編集しないでください。 元のスクリプトの実行は完了せず、これらのクライアントから意図した結果が得られない場合があります。

スクリプトを編集する

  1. [ソフトウェア ライブラリ] ワークスペースの [スクリプト] ノードに移動します。
  2. 編集するスクリプトを選択し、リボンの [編集 ] をクリックします。
  3. [ スクリプト の詳細] ページでスクリプトを変更または再インポートします。
  4. [ 次へ ] をクリックして 概要 を表示し、編集が終了したら [閉じる] をクリックします。

スクリプトをコピーする

  1. [ソフトウェア ライブラリ] ワークスペースの [スクリプト] ノードに移動します。
  2. コピーするスクリプトを選択し、リボンの [コピー ] をクリックします。
  3. [ スクリプト名 ] フィールドでスクリプトの名前を変更し、必要に応じて追加の編集を行います。
  4. [ 次へ ] をクリックして 概要 を表示し、編集が終了したら [閉じる] をクリックします。

スクリプトの実行

スクリプトが承認されると、単一のデバイスまたはコレクションに対して実行できるようになります。 スクリプトの実行が開始されると、1 時間でタイムアウトする優先度の高いシステムを介してすばやく起動されます。 その後、スクリプトの結果は、状態メッセージ システムを使用して返されます。

スクリプトのターゲットのコレクションを選択するには:

  1. Configuration Manager コンソールで、[資産とコンプライアンス] をクリックします。
  2. [資産とコンプライアンス] ワークスペースで、[ デバイス コレクション] をクリックします。
  3. デバイス コレクションの一覧で、スクリプトを実行するデバイスのコレクションをクリックします。
  4. 選択したコレクションを選択し、[ スクリプトの実行] をクリックします。
  5. スクリプトの実行ウィザードの [スクリプト] ページで、一覧からスクリプトを選択します。 承認済みのスクリプトだけが表示されます。
  6. [ 次へ] をクリックし、ウィザードを完了します。

重要

たとえば、ターゲット デバイスが 1 時間の間にオフになったなどの理由でスクリプトが実行されなかった場合は、スクリプトを再度実行する必要があります。

スクリプトの実行をスケジュールする

Configuration Manager の現在のブランチ バージョン 2309 以降、UTC でスクリプトの実行をスケジュールできるようになりました。

コレクションでスクリプトの実行をスケジュールします。

  1. Configuration Manager コンソールで、[資産とコンプライアンス] をクリックします。

  2. [資産とコンプライアンス] ワークスペースで、[ デバイス コレクション] をクリックします。

  3. [デバイス コレクション] リストで、スクリプトをスケジュールするデバイスのコレクションをクリックします。

  4. 選択したコレクションを選択し、[ スクリプトの実行] をクリックします。

  5. [スケジュール] ページで、[スクリプトの実行をスケジュールする] チェック ボックスをオンにし、[スケジュール時刻] を UTC で指定します。

  6. [概要] ページに表示される詳細を確認します。

  7. [ 次へ] をクリックし、ウィザードを完了します。

    スクリプトのスクリーンショット - スケジュール。

注:

最大 25 個のスケジュールされたスクリプトが 5 分ごとに処理されます。

ターゲット マシンの実行

スクリプトは、対象のクライアントで システム または コンピューター アカウントとして実行されます。 このアカウントでは、ネットワーク アクセスが制限されています。 スクリプトによるリモート システムと場所へのアクセスは、それに応じてプロビジョニングする必要があります。

スクリプトの監視

デバイスのコレクションでスクリプトの実行を開始したら、次の手順を使用して操作を監視します。 スクリプトの実行時にリアルタイムで監視し、後で特定のスクリプト実行の状態と結果に戻ることができます。 スクリプトの状態データは、 古いクライアント操作の削除メンテナンス タスク またはスクリプトの削除の一環としてクリーンアップされます。

スクリプト モニター - スクリプトの実行の状態

  1. Configuration Manager コンソールで、[監視] をクリックします。

  2. 監視」 ワークスペースで、「 スクリプトの状態」をクリックします。

  3. [ スクリプトの状態 ] リストには、クライアント デバイスで実行した各スクリプトの結果が表示されます。 スクリプト終了コード 0 は、通常、スクリプトが正常に実行されたことを示します。

    スクリプト モニター - スクリプトの切り捨て

スクリプトのスケジュール コレクションの監視

  1. Configuration Manager コンソールで、[監視] をクリックします。

  2. 「監視」ワークスペースで、「 スケジュールされたスクリプト」ノードをクリックします。

  3. [スケジュール済みスクリプト] の一覧に新しい行が表示されます。

  4. [スケジュールされたスクリプト] の一覧に新しい行が表示されていることを確認します。 State 列の値は Scheduled である必要があります。 ClientOperationId 列は空白にする必要があります。 スクリプト名、スケジュール時間など、他の列に適切な値があることを確認します。

  5. スケジュール時間の後、[ スケジュールされたスクリプト ] ノードを更新します。 State 列の値は Successfully initiated client operation である必要があります。 ClientOperationId 列には整数値が必要です。

  6. 「監視」ワークスペースで、「 スクリプト・ステータス」ノードをクリックします。新しい行が一覧に表示され、 ClientOperationId[スケジュールされたスクリプト ] ノードの ClientOperationId と等しいことを確認します。

  7. [ View Status] をクリックし、スクリプト出力が表示されていることを確認します。

    スクリプトのスクリーンショット - 監視のスケジュール、

スクリプト出力

スクリプトの結果を ConvertTo-Json コマンドレットにパイプすることにより、JSON 書式設定を使用してクライアントがスクリプトを返します。 JSON 形式は、読み取り可能なスクリプト出力を一貫して返します。 オブジェクトを出力として返さないスクリプトの場合、ConvertTo-Json コマンドレットは出力を JSON ではなくクライアントが返す単純な文字列に変換します。

  • 不明な結果が得られるスクリプト、またはクライアントがオフラインだったスクリプトは、グラフやデータ セットに表示されません。

  • 大きなスクリプト出力は 4 KB に切り詰められるため、返されないようにします。

  • スクリプトで列挙型オブジェクトを文字列値に変換して、JSON 形式で適切に表示されるようにします。

    オブジェクトの列挙型を sting 値に変換する

詳細なスクリプト出力は、未加工または構造化された JSON 形式で表示できます。 この書式設定により、出力の読み取りと分析が容易になります。 スクリプトが有効な JSON 形式のテキストを返す場合、 または ConvertTo-JSON PowerShell コマンドレットを使用して出力を JSON に変換できる場合は、JSON 出力 または 未加工出力として詳細な出力を表示します。 それ以外の場合、唯一のオプションは スクリプト出力です。

例: スクリプト出力は有効な JSON に変換可能です

コマンド: $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      16299  551

例: スクリプト出力が有効な JSON ではない

コマンド: Write-Output (Get-WmiObject -Class Win32_OperatingSystem).Caption

Microsoft Windows 10 Enterprise

ログ ファイル

  • クライアントでは、既定では C:\Windows\CCM\logs にあります。

    • Scripts.log
    • CcmMessaging.log
  • MP では、既定では C:\SMS_CCM\Logs にあります:

    • MP_RelayMsgMgr.log
  • サイト サーバーの既定では、C:\Program Files\Configuration Manager\Logs にあります。

    • SMS_Message_Processing_Engine.log

Windows PowerShell で自動化する

次の PowerShell コマンドレットを使用すると、これらのタスクの一部を自動化できます。

関連項目