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

当我从DPM Manangement Shell运行Connect-DPMServer <DPM Server Name> cmdlet时,命令成功执行,并且我能够连接到服务器。

但是,当我在脚本中包含相同的命令并通过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 cmdlet(如Get-DPMProtectionGroup)也是如此。

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

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

编辑

我做了一些观察。我的脚本包括两个部分:包装器脚本和帮助器脚本,包装器脚本将其称为独立作业。

所有DPM命令都在包装脚本中标识,但是当其作为作业运行时在帮助程序脚本中未标识。

有什么解释为什么可以解决这个问题?

最佳答案

我想出了解决方案,这里是:
发生什么
包装程序脚本在DPM PowerShell中运行,然后将帮助程序脚本作为单独的作业或线程调用。运行此帮助程序脚本的环境是Windows本机Powershell,而不是DPM Powershell。因此,此处未标识DPM命令。
解决方案
调用帮助程序脚本后,需要立即导入DPM特定的模块。步骤如下:

  • 右键单击DPM命令行管理程序图标并查看属性。
  • 选择目标的值。对我来说,看起来像这个C:\Windows\system32\windowspowershell\v1.0\powershell.exe -noexit -File "D:\DPM\DPM\bin\dpmcliinitscript.ps1"
  • -File的参数"D:\DPM\DPM\bin\dpmcliinitscript.ps1"的值是文件,当导入Windows Powershell时会将其转换为DPM管理控制台。这意味着,它将使用DPM命令加载 shell 程序。
  • 通过点源将该文件包含在帮助脚本中。这意味着,辅助脚本的第一行应如下所示:."D:\DPM\DPM\bin\dpmcliinitscript.ps1"这将有助于被调用的 shell 识别DPM特定的命令。
  • 关于powershell - Powershell版本2中的DPM命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31578658/

    10-13 06:10