Spécification des paramètres ComputerName et Credential
Lorsque vous créez un script personnalisé, vous indiquez le type de cible dans les métadonnées du script. Gardez bien ce type de cible en tête lorsque vous écrivez votre script. Le principal aspect à prendre en compte pour l'écriture du script est de savoir si vous devez ou non inclure les paramètres ComputerName (Nom d'ordinateur) et Credential (Référence d'authentification) dans les commandes. L'environnement ITScripts fournit le nom de l'ordinateur dans la variable ST_ComputerName et la référence d'authentification de cet ordinateur dans la variable ST_Credential. Par exemple, si vous écrivez un script avec le type de cible « Any » (Tous), vous pouvez spécifier la commande suivante :
Get-WmiObject win32_Share -ComputerName $ST_ComputerName -Credential $ST_Credential
Cependant, cette commande échoue si vous l'exécutez sur la machine locale, avec l'erreur suivante :
Get-WmiObject : Les références d'authentification utilisateur ne peuvent pas être utilisées pour des connexions locales
Autrement dit, cette commande fonctionne pour le type de cible « Any » si la machine cible n'est pas la console, mais elle échoue dans les cas suivants :
- Type de cible = 'Console'
- Type de cible = 'WinRM Remoting'
- Type de cible = 'Any' et la cible est l'ordinateur de console
Pour tenir compte de ces situations, votre script devra peut-être détecter s'il utilise des fonctions à distance ou si la cible est la machine de console. Pour simplifier la création du script, ITScripts fournit deux fonctions : ST-ComputerAndCredential et ST-SubCC.
ST-ComputerAndCredential
Cette fonction renvoie la chaîne correcte à utiliser pour les paramètres
-ComputerName et -Credential en fonction du type de script, du fait qu'il s'exécute ou non sur la console, et du fait que des références d'authentification ont ou non été fournies pour la machine. Cette fonction renvoie l'une des chaînes suivantes :
“-ComputerName $ST_ComputerName –Credential $ST_Credential”
“-ComputerName $ST_ComputerName”
“”
Vous pouvez utiliser cela dans votre commande de script sans vous inquiéter de l'environnement d'exécution. Par exemple :
$cc = ST-ComputerAndCredential
$shares = Invoke-Expression "Get-WmiObject win32_Share $cc"
Invoke-Expression sert à remplacer la valeur de $cc avant d'exécuter la commande. Le problème de cette construction est que vous ne devez pas oublier d'utiliser des caractères d'échappement pour les caractères spéciaux dans votre commande. Par exemple, le caractère « $ » et les guillemets doivent porter un caractère d'échappement dans la commande suivante :
$ST_CC = ST-ComputerAndCredential
$registryObject = Invoke-Expression "Get-WmiObject -list
-namespace root\default $ST_CC |
where-object { `$_.name -eq `"StdRegProv`" }"
La fonction suivante simplifie encore davantage l'opération.
ST-SubCC
Cette fonction combine les deux commandes mentionnées dans l'exemple précédent. Lorsque vous l'appelez pour la première fois, elle place le résultat de ST-ComputerAndCredential dans une variable PowerShell nommée ST_CC. Elle transmet ensuite la commande obtenue à Invoke-Expression. Surtout n'oubliez pas : lorsque vous utilisez ST_SubCC, la commande doit être placée entre apostrophes, pas entre guillemets. Les exemples ci-dessus deviennent :
$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" }’