Powershell 版本 2 中的 DPM 命令

DPM Commands in Powershell Version 2

我正在运行正在运行一个需要连接到 DPM 服务器的 PowerShell 脚本。

当我 运行 运行 来自 DPM 管理 Shell 的 Connect-DPMServer <DPM Server Name> cmdlet 时,命令成功并且我能够连接到服务器。

但是,当我在脚本中包含相同的命令并通过 DPM 管理 Shell 调用脚本时,出现以下错误:

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 cmdlet 的情况类似 Get-DPMProtectionGroup

我正在 运行在 Windows Server 2008 R2 上安装 Powershell 2.0 版。

这种奇怪行为的原因是什么?我该如何解决这个问题?

编辑

我做了一些观察。我的脚本有两部分:一个包装脚本和一个由包装脚本作为独立作业调用的帮助脚本。

所有 DPM 命令都在包装脚本中标识,但当它 运行 作为作业时,它们不会在帮助脚本中标识。

任何解释为什么会这样以及任何解决相同问题的建议?

我找到了解决方案,这里是:

发生了什么 包装脚本在 DPM PowerShell 中运行,然后调用帮助脚本作为单独的作业或线程。此帮助程序脚本运行的环境是 windows native powershell 而不是 DPM Powershell。因此 DPM 命令在那里没有被识别。

解决方案 调用帮助程序脚本后,需要立即导入 DPM 特定模块。步骤如下:

  1. 右键单击 DPM 管理 Shell 图标并查看属性。

  2. Select 目标值。对我来说,它看起来像这样 C:\Windows\system32\windowspowershell\v1.0\powershell.exe -noexit -File "D:\DPM\DPM\bin\dpmcliinitscript.ps1"

  3. 参数 -File 的值即 "D:\DPM\DPM\bin\dpmcliinitscript.ps1" 是导入到 Windows Powershell 时将其转换为 DPM 管理的文件安慰。这意味着,它使用 DPM 命令加载 shell。

  4. 通过点源将此文件包含在帮助程序脚本中。这意味着,帮助脚本的第一行应该如下所示:."D:\DPM\DPM\bin\dpmcliinitscript.ps1"

    这将有助于调用的 shell 识别 DPM 特定命令。