我正在运行需要连接到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特定的模块。步骤如下:
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/