Вероятно, мне не следует задавать общий вопрос с конкретным примером, но мне сложно переводить некоторые основные команды из консоли PowerShell в повторно используемые функции и пользовательские командлеты.Есть ли где-нибудь определенное руководство по синтаксису PowerShell, содержащее ошибки, советы и подсказки?
Например, я пытаюсь создать функцию для автоматизации администрирования экземпляров BizTalk Host.Следующая функция не работает (происходит сбой во время выполнения), в то время как каждая отдельная строка работает и работает, как ожидается, при индивидуальной вставке в консоль PowerShell.
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)
}
Кстати, ошибка, которую я получаю в этом конкретном случае,вот это:
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>
[Edit] После дальнейшего исследования кажется, что функция не любит присваивать свойства объекту WMI через переменную.Если я жестко закодирую все значения (вместо того, чтобы полагаться на предоставленные параметры функции), то он будет работать как положено!
По сути, это работает:
# Using hard-coded value
$objServerHost["HostName"] = "TestHost"
В то время как это не:
# Using function supplied parameter
$objServerHost["HostName"] = $HostName
Тем не менее, я не понимаю, почему ...