具体的な例では一般的な質問はしませんが、PowerShellコンソールの基本コマンドを再利用可能な関数とカスタムコマンドレットに変換するのは苦労します。 PowerShellの構文には、ちょっとしたヒント、ヒント、ヒントなどが書いてあります。(幾分)複雑なPowerShell構文のガイドがありますか?例Biztalk
たとえば、私はBizTalkホストインスタンスの管理を自動化するために関数を作成しようとしています。次の関数は動作しません(実行時に失敗します)。一方、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)
}
、私はこの特定のケースでは、受信エラーはこの1つである:
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"
をしません:
# Using function supplied parameter
$objServerHost["HostName"] = $HostName
それでも、私は限りガイドが行くように、なぜ...
最後の例でスクリプトエラーが発生していませんか? '$ HostName'は、あなたがそれを割り当てるとき、実際の文字列(nullでも空でもない)ですか? PowerShellでは、リテラル文字列値の割り当てと変数名(変数が文字列型の場合)の間には違いはありません。 –