Configuration Manager でタスク シーケンス変数を使用する方法

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

Configuration Manager の OS 展開機能のタスク シーケンス エンジンは、多くの変数を使用してその動作を制御します。 以下の変数を使用して以下の操作を行います。

  • 手順に条件を設定する
  • 特定の手順の動作を変更する
  • スクリプトでより複雑なアクションに使用する

使用可能なすべてのタスク シーケンス変数のリファレンスについては、「 タスク シーケンス変数」を参照してください。

変数の種類

変数にはいくつかの種類があります。

組み込み変数

組み込み変数は、タスク シーケンスが実行される環境に関する情報を提供します。 これらの値は、タスク シーケンス全体で使用できます。 通常、タスク シーケンス エンジンは、手順を実行する前に組み込み変数を初期化します。

たとえば、_SMSTSLogPath は、Configuration Manager コンポーネントがログ ファイルを書き込むパスを指定する環境変数です。 すべてのタスク シーケンス ステップがこの環境変数にアクセスできます。

タスク シーケンスは、各手順の前にいくつかの変数を評価します。 たとえば、 _SMSTSCurrentActionName には、現在のステップの名前が一覧表示されます。

アクション変数

タスク シーケンス アクション変数は、単一のタスク シーケンス ステップで使用される構成設定を指定します。 デフォルトでは、ステップは実行前に設定を初期化します。 これらの設定は、関連付けられているタスク シーケンスのステップが実行されている間にのみ使用できます。 タスク シーケンスは、手順を実行する前に、アクション変数の値を環境に追加します。 その後、ステップの実行後に環境から値を削除します。

たとえば、タスク シーケンスに [コマンド ラインの実行 ] ステップを追加します。 この手順には、 開始場所 プロパティが含まれています。 タスク シーケンスには、このプロパティの既定値が WorkingDirectory 変数として格納されます。 タスク シーケンスは、[ コマンド ラインの実行] ステップを実行する前にこの値を初期化します。 この手順の実行中に、WorkingDirectory値から [開始場所] プロパティ値にアクセスします。 手順が完了すると、タスク シーケンスによって WorkingDirectory 変数の値が環境から削除されます。 タスク シーケンスに別の コマンド ライン実行 ステップが含まれている場合は、新しい WorkingDirectory 変数が初期化されます。 その時点で、タスク シーケンスは変数を現在の手順の開始値に設定します。 詳細については、「 WorkingDirectory」を参照してください。

アクション変数の 既定 値は、ステップの実行時に表示されます。 新しい値を設定すると、タスク シーケンスの複数のステップで使用できるようになります。 既定値をオーバーライドしても、新しい値は環境に残ります。 この新しい値は、タスク シーケンス内の他の手順の既定値を上書きします。 たとえば、タスク シーケンスの最初のステップとして [ タスク シーケンス変数の設定 ] ステップを追加します。 この手順では、 WorkingDirectory 変数を C:\ に設定します。 タスク シーケンスの コマンド ライン実行 ステップでは、新しい開始ディレクトリ値が使用されます。

一部のタスク シーケンスの手順では、特定のアクション変数が 出力としてマークされます。 タスク シーケンスの後の手順で、これらの出力変数を読み取ります。

注:

すべてのタスク シーケンス手順にアクション変数があるわけではありません。 たとえば、[ BitLocker を有効にする] アクションに関連付けられた変数はありますが、[ BitLocker を無効にする ] アクションに関連付けられている変数はありません。

カスタム変数

これらの変数は、Configuration Manager によって作成されないものです。 独自の変数を初期化して、条件として、コマンド ラインまたはスクリプトで使用します。

新しいタスク シーケンス変数の名前を指定する場合は、次のガイドラインに従います。

  • タスク シーケンス変数名には、文字、数字、アンダースコア文字 (_)、およびハイフン (-) を含めることができます。

  • タスク シーケンス変数名の最小長は 1 文字、最大長は 256 文字です。

  • ユーザー定義変数は、文字 (A-Z または a-z) で始まる必要があります。

  • ユーザー定義変数名をアンダースコア文字で始めることはできません。 読み取り専用のタスク シーケンス変数の前にアンダースコア文字が足を付けるのは、読み取り専用のタスク シーケンス変数のみです。

  • タスク シーケンス変数名の大文字と小文字は区別されません。 たとえば、 OSDVARosdvar は同じタスク シーケンス変数です。

  • タスク シーケンス変数名の先頭と末尾をスペースにすることはできません。 また、埋め込みスペースを含めることもできません。 タスク シーケンスでは、変数名の先頭または末尾にあるスペースは無視されます。

作成できるタスク シーケンス変数の数に制限はありません。 ただし、変数の数は、タスク シーケンス環境のサイズによって制限されます。 タスク シーケンス環境の合計サイズ制限は 8 KB です。 詳細については、「 タスク シーケンス ポリシーのサイズを小さくする」を参照してください。

読み取り専用変数

一部の変数は読み取り専用であるため、値は変更できません。 通常、名前はアンダースコア文字 (_) で始まります。 タスク シーケンスは、それらを操作に使用します。 読み取り専用変数は、タスク シーケンス環境で表示されます。

これらの変数は、スクリプトまたはコマンド ラインで役立ちます。 たとえば、コマンド ラインを実行し、出力を他のログ ファイルと共に _SMSTSLogPath 内のログ ファイルにパイプします。

注:

読み取り専用のタスク シーケンス変数は、タスク シーケンスのステップごとに読み取ることができますが、設定することはできません。 たとえば、[ コマンド ラインの実行] ステップのコマンド ラインの一部として読み取り専用変数を使用します。 タスク シーケンス変数の設定 手順を使用して読み取り専用変数を設定することはできません。

配列変数

タスク シーケンスは、いくつかの変数を配列として格納します。 配列内の各要素は、1 つのオブジェクトの設定を表します。 デバイスに複数の構成対象がある場合は、これらの変数を使用します。 次のタスク シーケンスの手順では、配列変数を使用します。

変数の設定方法

カスタム変数または読み取り専用ではない変数の場合、変数の値を初期化して設定する方法がいくつかあります。

変数の作成と同じメソッドを使用して、環境から変数を削除します。 変数を削除するには、変数値を空の文字列に設定します。

複数のメソッドを組み合わせて、タスク シーケンス変数を同じシーケンスに対して異なる値に設定できます。 たとえば、タスク シーケンス エディターを使用して既定値を設定し、スクリプトを使用してカスタム値を設定します。

同じ変数を異なる方法で設定した場合、タスク シーケンス エンジンは次の順序を使用します。

  1. 最初にコレクション変数を評価します。

  2. デバイス固有の変数は、コレクションに設定された同じ変数をオーバーライドします。

  3. タスク シーケンス中に任意のメソッドによって設定された変数は、コレクション変数やデバイス変数よりも優先されます。

タスク シーケンス変数値の一般的な制限事項

  • タスク シーケンス変数の値は、4,000 文字以内にする必要があります。

  • 読み取り専用のタスク シーケンス変数は変更できません。 読み取り専用変数の名前はアンダースコア文字 (_) で始まります。

  • タスク シーケンス変数の値は、値の使用方法に応じて大文字と小文字が区別されることがあります。 ほとんどの場合、タスク シーケンス変数の値に大文字と小文字は区別されません。 パスワードを含む変数では、大文字と小文字が区別されます。

タスク シーケンス変数の設定

タスク シーケンスのこの手順を使用して、1 つの変数を 1 つの値に設定します。

詳細については、「 タスク シーケンス変数の設定」を参照してください。

動的変数の設定

タスク シーケンスのこの手順を使用して、1 つ以上のタスク シーケンス変数を設定します。 このステップでは、使用する変数と値を決定するためのルールを定義します。

詳細については、「 動的変数の設定」を参照してください。

PowerShell スクリプトの実行

タスク シーケンスのこの手順は、PowerShell スクリプトを使用してタスク シーケンス変数を設定するために使用します。

パッケージからスクリプト名を指定するか、手順に PowerShell スクリプトを直接入力できます。 次に、step プロパティの [ タスク シーケンス変数に出力 ] を使用して、スクリプト出力をカスタム タスク シーケンス変数に保存します。

この手順の詳細については、「 PowerShell スクリプトの実行」を参照してください。

注:

PowerShell スクリプトを使用して、 TSEnvironment オブジェクトで 1 つ以上の変数を設定することもできます。 詳細については、「Configuration Manager SDK で実行中のタスク シーケンスで変数を使用する方法」を参照してください。

[PowerShell スクリプトの実行] ステップを使用したシナリオの例

複数の国/地域のユーザーがいる環境の場合、複数の言語固有の OS 適用 手順の条件として設定する OS 言語をクエリする必要があります。

  1. OS を適用する手順の前に、タスク シーケンスに PowerShell スクリプトの実行のインスタンスを追加します。

  2. [PowerShell スクリプトを入力する] オプションを使用して、次のコマンドを指定します。

    (Get-Culture).TwoLetterISOLanguageName
    

    コマンドレットの詳細については、「 Get-Culture」を参照してください。 2 文字の ISO 言語名の詳細については、 ISO 639-1 コードのリストを参照してください。

  3. [ タスク シーケンス変数に出力] オプションの場合は、 CurrentOSLanguage を指定します。

    PowerShell スクリプトの実行ステップの例のスクリーンショット

  4. 英語のイメージの [OS の適用 ] 手順で、次の条件を作成します。 Task Sequence Variable CurrentOSLanguage equals "en"

    OS 手順の適用の条件例のスクリーンショット

    ヒント

    ステップで条件を作成する方法の詳細については、「 変数にアクセスする方法 - ステップ条件」を参照してください。

  5. タスク シーケンスを保存してデプロイします。

英語版の Windows を搭載したデバイスで [PowerShell スクリプトの実行 ] ステップを実行すると、コマンドによって値 en が返されます。 その後、その値がカスタム変数に保存されます。 英語の画像に対する OS の適用 手順が同じデバイスで実行されると、条件は true と評価されます。 異なる言語の OS 適用 手順の複数のインスタンスがある場合、タスク シーケンスは OS 言語に一致する手順を動的に実行します。

コレクション変数とデバイス変数

デバイスとコレクションのカスタム タスク シーケンス変数を定義できます。 デバイスに定義する変数は、デバイスごとのタスク シーケンス変数と呼ばれます。 コレクションに定義された変数は、コレクション単位のタスク シーケンス変数と呼ばれます。 競合がある場合は、デバイスごとの変数がコレクションごとの変数より優先されます。 この動作は、特定のデバイスに割り当てられたタスク シーケンス変数の優先度が、そのデバイスを含むコレクションに割り当てられた変数よりも自動的に高くなることを意味します。

たとえば、デバイス XYZ はコレクション ABC のメンバーです。 MyVariable をコレクション ABC に割り当て、値は 1 です。 また、MyVariable をデバイス XYZ に割り当て、値は 2 です。 XYZ に割り当てられている変数の優先度は、コレクション ABC に割り当てられた変数よりも高くなります。 この変数を含むタスク シーケンスが XYZ で実行されている場合、MyVariable の値は 2 になります。

デバイスごとおよびコレクションごとの変数を非表示にして、Configuration Manager コンソールに表示されないようにすることができます。 オプション [Configuration Manager コンソールでこの値を表示しない] を使用すると、変数の値はコンソールに表示されません。 タスク シーケンス ログ ファイル (smsts.log) またはタスク シーケンス デバッガーにも変数値は表示されません。 この変数は、実行時にタスク シーケンスで引き続き使用できます。 これらの変数を非表示にしたくない場合は、最初にそれらを削除します。 次に、変数を非表示にするオプションを選択せずに、変数を再定義します。

警告

[ コマンド ラインの実行 ] ステップのコマンド ラインに変数を含めると、タスク シーケンスのログ ファイルに変数値を含む完全なコマンド ラインが表示されます。 機密データがログ ファイルに表示されないようにするには、タスク シーケンス変数 OSDDoNotLogCommandTRUE に設定します。

デバイスごとの変数は、プライマリ サイトまたは中央管理サイトで管理できます。 Configuration Manager は、デバイスに対して 1,000 個を超える変数を割り当てることができません。

重要

タスク シーケンスにコレクションごとの変数を使用する場合は、次の動作を考慮してください。

  • コレクションへの変更は、常に階層全体でレプリケートされます。 コレクション変数に加えた変更は、現在のサイトのメンバーだけでなく、階層全体のコレクションのすべてのメンバーに適用されます。

  • コレクションを削除すると、コレクション用に構成したタスク シーケンスの変数も削除されます。

デバイスのタスク シーケンス変数を作成する

  1. Configuration Manager コンソールで、[資産とコンプライアンス] ワークスペースに移動し、[デバイス] ノードを選択します。

  2. ターゲット デバイスを選択し、[ プロパティ] を選択します。

  3. [ プロパティ] ダイアログ ボックスで、[ 変数 ] タブに切り替えます。

  4. 作成する変数ごとに、[ 新規] アイコンを選択します。 タスク シーケンス変数の名前とを指定します。 変数を非表示にして Configuration Manager コンソールに表示されないようにする場合は、[Configuration Manager コンソールでこの値を表示しない] オプションを選択します。

  5. デバイス プロパティにすべての変数を追加したら、[ OK] を選択します。

コレクションのタスク シーケンス変数を作成する

  1. Configuration Manager コンソールで、[資産とコンプライアンス] ワークスペースに移動し、[デバイス コレクション] ノードを選択します。 ターゲット コレクションを選択し、[ プロパティ] を選択します。

  2. [ プロパティ] ダイアログ ボックスで、[ コレクション変数 ] タブに切り替えます。

  3. 作成する変数ごとに、[ 新規] アイコンを選択します。 タスク シーケンス変数の名前とを指定します。 変数を非表示にして Configuration Manager コンソールに表示されないようにする場合は、[Configuration Manager コンソールでこの値を表示しない] オプションを選択します。

  4. 必要に応じて、タスク シーケンスの変数を評価するときに使用する Configuration Manager の優先度を指定します。

  5. コレクション プロパティにすべての変数を追加したら、[ OK] を選択します。

TSEnvironment COM オブジェクト

スクリプトから変数を操作するには、 TSEnvironment オブジェクトを使用します。

詳細については、「Configuration Manager SDK で実行中のタスク シーケンスで変数を使用する方法」を参照してください。

事前開始コマンド

prestart コマンドは、ユーザーがタスク シーケンスを選択する前に Windows PE で実行されるスクリプトまたは実行可能ファイルです。 prestart コマンドは、変数を照会するか、ユーザーに情報の入力を求めてから、それを環境に保存できます。 TSEnvironment COM オブジェクトを使用して、prestart コマンドから変数の読み取りと書き込みを行います。

詳細については、「 タスク シーケンス メディアの事前開始コマンド」を参照してください。

タスク シーケンス ウィザード

タスク シーケンス ウィザード ウィンドウでタスク シーケンスを選択すると、タスク シーケンスの変数を編集するページに [編集] ボタンが表示されます。 アクセシブルなキーボード ショートカットを使用して変数を編集できます。 この変更は、マウスが使用できない場合に役立ちます。

タスク シーケンス メディア ウィザード

メディアから実行されるタスク シーケンスの変数を指定します。 メディアを使用して OS を展開する場合は、タスク シーケンスの変数を追加し、メディアの作成時にその値を指定します。 変数とその値はメディアに格納されます。

注:

タスク シーケンスはスタンドアロン メディアに保存されます。 ただし、事前設定されたメディアなど、他のすべての種類のメディアは、管理ポイントからタスク シーケンスを取得します。

メディアからタスク シーケンスを実行するときに、ウィザードの [カスタマイズ ] ページで変数を追加できます。

コレクション単位またはコンピューター単位の変数の代わりにメディア変数を使用します。 タスク シーケンスがメディアから実行されている場合、コンピューターごとおよびコレクションごとの変数は適用されず、使用されません。

ヒント

タスク シーケンスは、Configuration Manager コンソールを実行しているコンピューター上のCreateTSMedia.logファイルにパッケージ ID と事前開始コマンド ラインを書き込みます。 このログ ファイルには、タスク シーケンスの変数の値が含まれています。 このログ ファイルを調べて、タスク シーケンスの変数の値を確認します。

詳細については、「 タスク シーケンス メディアの作成」を参照してください。

変数にアクセスする方法

前のセクションのいずれかのメソッドを使用して変数とその値を指定したら、それをタスク シーケンスで使用します。 たとえば、組み込みのタスク シーケンス変数の既定値にアクセスしたり、変数の値を条件として手順を作成したりします。

タスク シーケンス環境の変数値にアクセスするには、次の方法を使用します。

手順で使用する

タスク シーケンス手順の設定に変数値を指定します。 タスク シーケンス エディターで手順を編集し、変数名をフィールド値として指定します。 変数名をパーセント記号 (%) で囲みます。

たとえば、変数名は、[コマンド ラインの実行] ステップの [コマンド ライン] フィールドの一部として使用します。 次のコマンド ラインは、コンピューター名をテキスト ファイルに書き込みます。

cmd.exe /c echo %_SMSTSMachineName% > C:\File.txt

ステップの条件

組み込みまたはカスタムのタスク シーケンス変数をステップまたはグループの条件の一部として使用します。 タスク シーケンスは、ステップまたはグループを実行する前に変数値を評価します。

変数値を評価する条件を追加するには、次の手順を実行します。

  1. タスク シーケンス エディターで、条件を追加するステップまたはグループを選択します。

  2. ステップまたはグループの [オプション] タブに切り替えます。 [ 条件の追加] をクリックし、[ タスク シーケンス変数] を選択します。

  3. [ タスク シーケンス 変数] ダイアログ ボックスで、次の設定を指定します。

    • 変数: 変数の名前。 たとえば、「 _SMSTSInWinPE 」のように入力します。

    • 条件: 変数値を評価する条件。 次の条件が利用可能です。

      • Exists
      • 存在しない
      • 等しい
      • 等しくない
      • より大きい
      • 以上
      • より少ない
      • 以下
      • Like ( *? のワイルドカードをサポート)
      • Not like (Version 2103 以降)
    • : チェックする変数の値。 たとえば、「 false 」のように入力します。

上記の 3 つの例は、タスク シーケンスが Windows PE のブート イメージから実行されているかどうかをテストするための共通の条件となります。

タスク シーケンス変数_SMSTSInWinPE equals "false"

既定のタスク シーケンス テンプレートの [Capture Filesと設定] グループでこの条件を参照して、既存の OS イメージをインストールしてください。

条件の詳細については、「 タスク シーケンス エディター - 条件」を参照してください。

カスタム スクリプト

タスク シーケンスの実行中に Microsoft.SMS.TSEnvironment COM オブジェクトを使用して変数の読み取りと書き込みを行います。

次のWindows PowerShell例では、_SMSTSLogPath変数をクエリして現在のログの場所を取得します。 スクリプトはカスタム変数も設定します。

# Create an object to access the task sequence environment
$tsenv = New-Object -ComObject Microsoft.SMS.TSEnvironment

# Query the environment to get an existing variable
# Set a variable for the task sequence log path
$LogPath = $tsenv.Value("_SMSTSLogPath")

# Or, convert all of the variables currently in the environment to PowerShell variables
$tsenv.GetVariables() | % { Set-Variable -Name "$_" -Value "$($tsenv.Value($_))" }

# Write a message to a log file
Write-Output "Hello world!" | Out-File -FilePath "$LogPath\mylog.log" -Encoding "Default" -Append

# Set a custom variable "startTime" to the current time
$tsenv.Value("startTime") = (Get-Date -Format HH:mm:ss) + ".000+000"

Windows セットアップ応答ファイル

指定する Windows セットアップ応答ファイルには、タスク シーケンスの変数を埋め込むことができます。 %varname% という形式を使用します (varname は変数の名前です)。 Windows および ConfigMgr のセットアップ手順では、変数名の文字列が実際の変数値に置き換えられます。 これらの埋め込みタスク シーケンス変数は、unattend.xml 応答ファイルの数値のみのフィールドでは使用できません。

詳細については、「Windows および ConfigMgr のセットアップ」を参照してください。

関連項目