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

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

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

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

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

変数の種類

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

組み込み変数

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

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

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

アクション変数

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

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

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

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

注:

すべてのタスク シーケンス ステップにアクション変数があるわけではありません。 たとえば、 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 言語を照会して、複数の言語固有の Apply 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. タスク シーケンスを保存してデプロイします。

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

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

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

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

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

警告

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

デバイスごとの変数は、プライマリ サイトまたは中央管理サイトで管理できます。 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 オブジェクトを使用します。

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

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

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

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

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

注:

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

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

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

ヒント

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

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

変数にアクセスする方法

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

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

手順で使用する

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

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

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

ステップ条件

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

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

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

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

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

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

    • 条件: 変数値を評価する条件。 次の条件を使用できます。

      • Exists
      • 存在しない
      • 等しい
      • 等しくない
      • より大きい
      • より大きいか等しい
      • より少ない
      • より小さいか等しい
      • Like (および ?のワイルドカードを*サポートしています)
      • 好きではない (バージョン 2103 以降)
    • : 確認する変数の値。 たとえば、「 false 」のように入力します。

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

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

既存の 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 のセットアップ」を参照してください。

関連項目