PowerShell ガイドライン
Absolute Reach® 機能を使用すると、PowerShell スクリプトを Windows デバイスで実行できるようになります。Windows PowerShell とはコマンドラインのシェルおよびスクリプト言語です。システム管理者は、PowerShell を使用してデバイスのオペレーティングシステムの管理と、デバイスで実行されるアプリケーションの処理を自動化します。
Absolute Reach を使用して PowerShell スクリプトをお客様の Absolute アカウント内の Windows デバイスに展開する前に、Absolute Reach がサポートするスキーマについて熟知しておくことがベストプラクティスです。
Microsoft によって課されている制限により、Windows 11 SE では PowerShell はサポートされません。Reach 機能は PowerShell を使用するため、Windows 11 SE を実行しているデバイスではサポートされません。

Absolute のスキーマは、スクリプトパラメーターの解析をサポートします。これは、パラメーターをラベル付きのユーザー入力フィールドとして、スクリプト実行ウィザードで表示できることを意味します。ユーザーがウィザードを使用してスクリプト実行リクエストを作成する際に、スクリプトパラメーターの値をラベル付きフィールドに直接入力できます。
スクリプトパラメーターの解析を有効にするには、以下のガイドラインに遵守することが必要です。
-
PowerShell スクリプトは UTF-8 エンコードを使用する必要があります。スクリプトに Unicode 文字が含まれる場合、UTF-8 (BOM 付き) エンコードを使用する必要があります。
すべての PowerShell スクリプトが BOM 付きの UTF-8 エンコードを使用することを推奨します。
-
スクリプトヘッダーに以下のフラグを使用します:
コピーする.ABSOLUTEPARSE True
-
解析したいすべてのパラメーターが最初のパラメーター (Param) ブロックにあることを確認します。ブロックはスクリプトレベルでも関数レベルでも構いません。
スクリプトに複数のパラメーターブロックがある場合、最初のブロックが解析され、その後のブロックはすべて無視されます。
- 解析したパラメーターブロックに含まれるパラメーターは、ゼロ (0) を除く任意の数とすることができます。
- パラメーター名にスペースを使用することはできませんが、Unicode 文字とキャメルケース (例:DeviceName) はすべてサポートされます。
-
次のパラメーター属性がサポートされています。
-
Mandatory: パラメーターがスクリプト実行ウィザードで必須フィールドとして表示されるようにするには、パラメーターの説明に以下の値を加えます。
コピーするMandatory=$True
-
HelpMessage: パラメーターの説明または可能な値のリストを与えるには、この属性を加えます。HelpMessage テキストは、スクリプト実行ウィザードのフィールドに表示されます。
コピーするHelpMessage="Your help message here"
その他のパラメーター属性は現時点ではサポートされません。
-
-
各変数フィールドに正確なデータ型を入力してもらうには、各パラメーターに型制約を指定します。以下の型制約を解析できます。
- [int]:32-bit 符号付き整数
- [long]:64-bit 符号付き整数
- [string]:長さ固定の Unicode 文字列
- [char]:Unicode 16-bit 文字
- [decimal]:128-bit 十進数値
-
スクリプト実行ウィザードのスクリプトを表示を使用して、スクリプトの上部にユーザー向けの指示またはメモを表示するには、スクリプトの冒頭に以下の形式でコメントを入力します:
コピーする<# <指示またはメモ…> #>
パラメーターの解析を示すサンプルスクリプト
以下の部分的なスクリプトは、パラメーターの解析の作成方法を示します。
<# <指示またはメモ…> .ABSOLUTEPARSE True ------------------------------------------------------------------------------------------------------------------------------- #> # # Get the version of windows operating system # # Parameter block for this script param( [Parameter(Mandatory=$true, HelpMessage="Wireless network SSID name")] [string]$SSID, [Parameter(Mandatory=$false, HelpMessage="Wi-Fi security key")] [string]$Key

スクリプトが出力を生成する場合、スクリプトにコードを追加することで、Secure Endpoint Console のカスタムデバイスフィールドで出力を表示することができます。
Secure Endpoint Console で確認できるユーザー入力情報を収集する場合、スクリプトではなくメッセージ送信リクエストを使用します。スクリプトを使用すると、カスタムデバイスフィールドにユーザーの応答が入力されない場合があります。
カスタムデバイスフィールドでスクリプトの出力を表示するには:
- Reach スクリプトを管理する権限を持つユーザーとして、Secure Endpoint Console へログインします。
- ナビゲーションバーで
設定 >
カスタムフィールド > デバイスフィールドの管理をクリックします。
- スクリプト出力用に新しいカスタムデバイスフィールドを作成します。このスキーマでは、テキスト形式と日付形式の両方のカスタムデバイスフィールドがサポートされます。
-
PowerShell スクリプトで、カスタムデバイスフィールドのコードを try catch ブロックに入力します:
コピーするtry { } catch [Exception] { Write-Host $_.Exception.Message Write-Host $_.InvocationInfo.PositionMessage }
-
Absolute Reach ヘルパーライブラリをインポートするには、以下の命令行を try catch ブロックに追加します:
コピーする$libraryPath = $Env:ProgramData + "\CTES\Components\ANS\CDFClientLibrary.dll" [Reflection.Assembly]::LoadFile($libraryPath)
-
更新したいカスタムデバイスフィールドごとに、前のステップで追加した行の後に以下の命令行を追加します。
コピーする[CDFClientLibrary.CDFParser]::AddCDF("<CDFName>", <CDF Value>, "<CDF Type>")
ここで、変数は次のように定義されています。
- <CDF Name>: Secure Endpoint Console のカスタムデバイスフィールドの正確な名前
-
<CDF Value>: カスタムデバイスフィールドに表示させたい PowerShell スクリプト変数 (例: $OSWindowsVersion)
ヌル値を渡すには、[NullString]::Valueを使用します。
-
<CDF Type>: カスタムデバイスフィールドでサポートされるデータ型。次の型がサポートされています。
- テキスト: Unicode 文字列
- 日付: 日付形式は mm/dd/yyyy
-
CDF コレクションを解析し、Absolute サーバーにアップロードされる出力ファイルを生成するには、前のステップで入力した命令行の後に、以下の命令行を追加します:
コピーする[CDFClientLibrary.CDFParser]::CompleteCDFProcessing()
サンプルスクリプト
コピーする# # Get the version of windows operating system # function GetOSWindowsVersion { return [string] (Get-CimInstance Win32_OperatingSystem).version } # # Get the date that the script was run # function GetCurrentDate { # the current date is the date that the script was run $date = Get-Date return [string] $date.month + "/" + $date.day + "/" + [string]$date.year } $OSWindowsVersion = GetOSWindowsVersion $CurrentDate = GetCurrentDate Write-Host $OSWindowsVersion Write-Host $CurrentDate # Sample code to add cdf information # Code should be in a try catch block try { # Import Client CDF Library $libraryPath = $Env:ProgramData + "\CTES\Components\ANS\CDFClientLibrary.dll" [Reflection.Assembly]::LoadFile($libraryPath) # Add multiple CDFs to cdf collection [CDFClientLibrary.CDFParser]::addCDF("OSWindowsVersion", $OSWindowsVersion, "text") [CDFClientLibrary.CDFParser]::addCDF("OSWindowsCheckDate", $CurrentDate, "date") # When script is finished adding CDFs, parse collection and output JSON with cdf.out name [CDFClientLibrary.CDFParser]::completeCDFProcessing() } catch [Exception] { Write-Host $_.Exception.Message Write-Host $_.InvocationInfo.PositionMessage }
- Secure Endpoint Console でスクリプトをアップロードしてデバイスに展開するには、スクリプト実行リクエストを作成します。
デバイスでスクリプトが実行されると、スクリプトの出力は Absolute データベースにアップロードされ、デバイスのカスタムデバイスフィールドが更新されます。
更新されたフィールドを確認するには、以下のステップを実行します。