Je ne devrais probablement pas poser une question générique avec un exemple spécifique, mais j'ai du mal à traduire certaines commandes de base de la console PowerShell vers des fonctions réutilisables et des cmdlets personnalisées. Existe-t-il un guide définitif de la syntaxe de PowerShell quelque part, avec des astuces, des conseils et des astuces? Par exemple, j'essaie de créer une fonction afin d'automatiser l'administration des instances de l'hôte BizTalk. La fonction suivante ne fonctionne pas (échoue au moment de l'exécution) alors que chaque ligne individuelle fonctionne et fonctionne comme prévu lorsqu'elle est collée individuellement dans une console PowerShell.Existe-t-il un guide pour la syntaxe PowerShell (quelque peu) compliquée? Exemple avec Biztalk
function AddNewHostInstance([string]$ServerName, [string]$HostName, [string]$Login, [string]$Password)
{
[System.Management.ManagementObject]$objServerHost = `
([WmiClass]"root/MicrosoftBizTalkServer:MSBTS_ServerHost").CreateInstance()
$objServerHost["ServerName"] = $ServerName
$objServerHost["HostName"] = $HostName
$objServerHost.Map()
$name = "Microsoft BizTalk Server " + $HostName + " " + $ServerName
[System.Management.ManagementObject]$objServerHost = `
([WmiClass]"root/MicrosoftBizTalkServer:MSBTS_HostInstance").CreateInstance()
$objHostInstance["Name"] = $name
$objHostInstance.Install($Login, $Password, $True)
}
Par ailleurs, l'erreur je reçois dans ce cas particulier est celui-ci:
PS C:\Users\username> createHostInstances $server, $host, $user, $pwd
Exception calling "Map" : "Invalid parameter "
At line:14 char:39
+ $objServerHost.Map <<<<()
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : WMIMethodException
Exception calling "Install" : "Instance of the WMI class is not found.
No instance was found with the specified key. This could be the result of the instance being deleted by another BizTalk Admin session."
At line:19 char:29
+ $objHostInstance.Install <<<< ($Login, $Password, $True)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : WMIMethodException
PS C:\Users\username>
[Modifier] Après plus ample investigation, il semble que la fonction ne veut pas attribuer des propriétés d'objet WMI via une variable. Si je code dur toutes les valeurs (au lieu de me fier aux paramètres de la fonction fournie), cela fonctionne comme prévu!
En gros, cela fonctionne:
# Using hard-coded value
$objServerHost["HostName"] = "TestHost"
Alors que cela ne fait pas:
# Using function supplied parameter
$objServerHost["HostName"] = $HostName
encore, je ne comprends pas pourquoi ...
Etes-vous sûr qu'il n'y a pas d'erreur de script dans le dernier exemple? Est-ce que '$ HostName' est une chaîne réelle (non nulle ou vide) lorsque vous l'affectez? Dans PowerShell, il ne devrait pas y avoir de différence entre l'attribution d'une valeur de chaîne littérale ou l'utilisation d'un nom de variable (lorsque la variable est un type de chaîne). –