3

DPM サーバーへの接続を必要とする PowerShell スクリプトを実行しています。

Connect-DPMServer <DPM Server Name>DPM 管理シェルからコマンドレットを実行すると、コマンドは成功し、サーバーに接続できます。

ただし、同じコマンドをスクリプトで囲み、DPM 管理シェルを介してスクリプトを呼び出すと、次のエラーが発生します。

The term 'Connect-DPMServer' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
+ CategoryInfo          : ObjectNotFound: (Connect-DPMServer:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

のような他の DPM コマンドレットの場合も同様ですGet-DPMProtectionGroup

Windows Server 2008 R2 で Powershell バージョン 2.0 を実行しています。

この奇妙な動作の理由と、これを回避するにはどうすればよいですか?

編集

私が行ったいくつかの観察があります。私のスクリプトには 2 つの部分があります。ラッパー スクリプトと、ラッパー スクリプトによって独立したジョブとして呼び出されるヘルパー スクリプトです。

すべての DPM コマンドはラッパー スクリプトで識別されますが、ジョブとして実行されるヘルパー スクリプトでは識別されません。

これがなぜなのか、同じことを解決するための提案はありますか?

4

1 に答える 1

1

私は解決策を見つけましたが、ここにあります:

何が起きて いるか ラッパー スクリプトは DPM PowerShell で実行され、ヘルパー スクリプトを別のジョブまたはスレッドとして呼び出します。このヘルパー スクリプトが実行される環境は、Windows ネイティブの PowerShell であり、DPM Powershell ではありません。したがって、DPM コマンドはそこで識別されません。

ソリューション ヘルパー スクリプトが呼び出されたらすぐに、DPM 固有のモジュールをインポートする必要があります。手順は次のとおりです。

  1. DPM 管理シェル アイコンを右クリックし、プロパティを表示します。

  2. ターゲットの値を選択します。私にとっては、このように見えますC:\Windows\system32\windowspowershell\v1.0\powershell.exe -noexit -File "D:\DPM\DPM\bin\dpmcliinitscript.ps1"

  3. パラメーターの値は、-FileWindows "D:\DPM\DPM\bin\dpmcliinitscript.ps1"Powershell にインポートされたときに DPM 管理コンソールに変換されるファイルです。つまり、シェルに DPM コマンドをロードします。

  4. ドット ソースを使用して、このファイルをヘルパー スクリプトに含めます。つまり、ヘルパー スクリプトの最初の行は次のようになります。."D:\DPM\DPM\bin\dpmcliinitscript.ps1"

    これは、呼び出されたシェルが DPM 固有のコマンドを識別するのに役立ちます。

于 2015-07-24T05:38:53.337 に答える