2009-09-01 4 views
2

예를 들어 일반적인 질문을하지 않아도되지만 PowerShell 콘솔의 일부 기본 명령을 재사용 가능한 함수와 사용자 지정 cmdlet으로 변환하는 데 어려움이 있습니다. gotchas, 힌트 및 팁과 함께 PowerShell의 구문에 대한 명확한 가이드가 있습니까?(다소) 복잡한 PowerShell 구문에 대한 지침이 있습니까? 예 : BizTalk

예를 들어 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) 
} 

, I는 특히이 경우 수신 오류이 하나이다 :

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> 

[편집 또한 조사 결과 보인다 함수 WMI 객체 속성을 지정하고자하지 않는다는 변수를 통해. 제공된 함수 매개 변수에 의존하지 않고 모든 값을 하드 코딩하면 예상대로 작동합니다!

기본적으로,이 작품이 반면

# Using hard-coded value 
$objServerHost["HostName"] = "TestHost" 

을하지 않습니다 가이드가 가서, 내가 지금까지 ... 왜

+0

마지막 예에서 스크립트 오류가 발생하지 않았습니까? '$ HostName'은 할당 할 때 실제 문자열 (null이 아니거나 비어 있지 않습니다)입니까? PowerShell에서 리터럴 문자열 값을 할당하거나 변수 이름을 사용할 때 (변수가 문자열 유형 인 경우)에는 차이가 없어야합니다. –

답변

6

을 이해하지 못하는

# Using function supplied parameter 
$objServerHost["HostName"] = $HostName 

을 아직도, 가장 좋은 책은 Bruce Payette의 Windows PowerShell in Action입니다. 2 월에 제 2 차 발행 예정이지만 전자 드래프트에 대한 초기 액세스 권한을 얻을 수 있습니다. 거기에 몇 가지 무료 도서도 있습니다. Mastering PowerShell Dr. Tobias Weltner와 나는 또한 < 60 페이지 eBook - Effective Windows PowerShell입니다. 이 마지막 기사는 PowerShell의 작동 방식에 대한 정신적 모델을 제공 할뿐만 아니라 여러 가지 문제를 다루고 있습니다. 당신이 사용하는 더 나은 행운을했을 경우

WRT 오류가 궁금 PowerShell을에 내장 된 지원 WMI에 대한 예 :

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

결과 WMI 개체가 & 방법 (지도 & 설치)를 적절한 데이터가있는 경우 참조 :지도() 오류에 관한

$host | fl * 
$host | Get-Member 
+0

+1 무료로 다운로드 할 수있는 eBook. –

+0

Get-WmiObject는 기존 개체를 검색하는 것으로 생각됩니다. WMI 클래스의 새 인스턴스를 만드는 데 사용할 수 있습니까? –

0

, 때로는 WMI를 사용하면 ("지도") $ objServerHost.psbase.Invoke을 대신 다시 드롭해야합니다. 그 외에도 BizTalk 관리를 위해 few sample PowerShell scripts을 얻었으니 가이드로 유용 할 것입니다.

+0

불행히도, 내 경우에는 작동하지 않습니다. "System.Management.Automation.PSInternalMemberSet에 메서드 이름 'Invoke'가 없어서 메서드 호출이 실패했습니다."라는 오류가 발생합니다. –

+0

링크를 제공해 주셔서 감사합니다. 나는 때때로 그들을 우연히 발견했다. –