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 のセキュリティ ロール:
実行スクリプトのセキュリティ スコープの詳細については
実行スクリプトのセキュリティ ロール
ロールベースの管理のFundamentals です。

制限事項

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

  • スクリプト言語: 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. カスタム ロールに [名前][説明] を付けます。
  4. セキュリティ ロールに、以下に示すアクセス許可を割り当てます。

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

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

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

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

  • 説明: これらのアクセス許可により、このロールはスクリプトを作成できますが、承認または実行することはできません。
  • アクセス許可: 次のアクセス許可が設定されていることを確認します。
カテゴリ アクセス許可 状態コード
コレクション スクリプトの実行 いいえ
Site 読み取り はい
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 個のパラメーターを含めることができます。 スクリプト パラメーターを使用したスクリプトの実行機能の現在の機能の概要を次に示します。 StringInteger データ型。 プリセット値のリストも使用できます。 スクリプトにサポートされていないデータ型がある場合は、警告が表示されます。

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

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

重要

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

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

パラメーターの検証

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

例: FirstName

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

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

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

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

正規表現の検証の使用

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

このダイアログの正規表現処理は、.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 時間でタイムアウトする優先度の高いシステムを介して迅速に起動されます。 スクリプトの結果は、状態メッセージ システムを使用して返されます。

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

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

重要

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

スクリプトのランタイムをスケジュールする

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

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

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

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

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

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

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

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

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

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

注:

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

ターゲット コンピューターの実行

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

スクリプトの監視

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

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

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

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

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

    スクリプト モニター - 切り捨てられたスクリプト

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

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

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

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

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

  5. [スケジュール時刻] の後、[ スケジュールされたスクリプト ] ノードを更新します。 状態列には、 正常に開始されたクライアント操作の値が必要です。 ClientOperationId 列には整数値が必要です。

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

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

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

スクリプト出力

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

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

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

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

    enum オブジェクトを sting 値に変換する

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

例: スクリプト出力が有効な 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 コマンドレットを使用して、これらのタスクの一部を自動化できます。

関連項目