ComputerName および Credential パラメータの指定
カスタム スクリプトを作成するときには、スクリプト メタデータでターゲット タイプを指定します。 スクリプトを作成するときには、ターゲット タイプに注意してください。 スクリプトの作成時に考慮すべき主な点は、コマンドに ComputerName および Credential パラメータを含めるかどうかです。 ITScripts 環境では、ST_ComputerName 変数でコンピュータ名を指定し、ST_Credential 変数でコンピュータの認証資格情報を指定します。 たとえば、ターゲット タイプ「Any」でスクリプトを作成するときには、次のコマンドを指定します。
Get-WmiObject win32_Share -ComputerName $ST_ComputerName -Credential $ST_Credential
ただし、ローカル コンピュータに対して実行した場合は、次のエラーでこのコマンドが失敗します。
Get-WmiObject : ローカル接続ではユーザ認証資格情報を使用できません。
つまり、このコマンドは、ターゲット タイプが「Any」かつターゲット コンピュータがコンソールではない場合に動作し、次の場合には失敗します。
- ターゲット タイプは「Console」です
- ターゲット タイプは「WinRM Remoting」です
- ターゲット タイプは「Any」で、ターゲットはコンソール コンピュータです
これらの場合を考えると、スクリプトでは、リモートを使用しているのか、ターゲットがコンソール コンピュータであるかどうかをテストしなければならない場合があります。 スクリプトの作成を簡素化するために、ITScripts は ST-ComputerAndCredential と ST-SubCC の2つの関数を提供しています。
ST-ComputerAndCredential
この関数は、
スクリプトの種類、コンソールで実行されるかどうか、コンピュータの認証資格情報が指定されているかどうかに基づいて、-ComputerName および -Credential パラメータで使用する適切な文字列を含む文字列を返します。 次の文字列のいずれかが返されます。
“-ComputerName $ST_ComputerName –Credential $ST_Credential”
“-ComputerName $ST_ComputerName”
“”
実行している環境を考慮せずに、スクリプト コマンドで使用できます。 例:
$cc = ST-ComputerAndCredential
$shares = Invoke-Expression "Get-WmiObject win32_Share $cc"
Invoke-Expression は、コマンドを実行する前に $cc の値を代入するために使用されます。 この構造の問題は、必ずコマンドで特殊文字をエスケープしなければならないということです。 たとえば、「$」と引用符文字は次のコマンドでエスケープする必要があります。
$ST_CC = ST-ComputerAndCredential
$registryObject = Invoke-Expression "Get-WmiObject -list
-namespace root\default $ST_CC |
where-object { `$_.name -eq `"StdRegProv`" }"
次の関数ではさらにシンプルになります。
ST-SubCC
この関数は、前の例で示した2つの関数を組み合わせます。 最初に呼び出されたときに、ST-ComputerAndCredential の結果が PowerShell 変数 ST_CC に格納されます。 そして、結果のコマンドが Invoke-Expression に渡されます。 ST_SubCC を使用するときには、二重引用符ではなく、単一の引用符でコマンドを囲む必要があります。 前の例は次のとおりです。
$shares = ST-SubCC ‘Get-WmiObject win32_Share $ST_CC’
$registryObject = ST-SubCC ‘Get-WmiObject -list
-namespace root\default $ST_CC |
where-object { $_.name -eq "StdRegProv" }’