Есть ли руководство по (несколько) запутанному синтаксису PowerShell? Пример с Biztalk - PullRequest
2 голосов
/ 01 сентября 2009

Вероятно, мне не следует задавать общий вопрос с конкретным примером, но мне сложно переводить некоторые основные команды из консоли 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

Тем не менее, я не понимаю, почему ...

Ответы [ 2 ]

6 голосов
/ 01 сентября 2009

Что касается руководств, лучшая книга из них - Windows PowerShell в действии от Брюса Пайетта. В феврале выйдет второе издание, но вы можете получить ранний доступ к электронному черновику. Есть также пара бесплатных книг там. Освоение PowerShell от доктора Тобиаса Вельтнера, и у меня также есть небольшая электронная книга <60 страниц - <a href="http://tinyurl.com/efposh" rel="nofollow noreferrer"> Эффективная Windows PowerShell . В этом последнем рассказывается о нескольких проблемах, а также предоставляется ментальная модель работы PowerShell.

WRT ошибка, интересно, вам повезет, если вы используете встроенную поддержку PowerShell для WMI, например ::10000

$namespace = 'root/MicrosoftBizTalkServer' 
$host = Get-WmiObject -namespace $namespace -class MSBTS_HostInstance

Проверьте, имеет ли полученный объект WMI соответствующие данные и методы (Map & Install):

$host | fl *
$host | Get-Member
0 голосов
/ 02 сентября 2009

Что касается ошибки Map (), иногда с WMI вам нужно откатиться назад и вместо этого сделать $ objServerHost.psbase.Invoke ("Map"). Кроме этого, у меня есть несколько примеров сценариев PowerShell для администрирования BizTalk, которые могут оказаться полезными в качестве руководства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...