我正在运行需要连接到DPM服务器的PowerShell脚本。
当我运行从DPM Manangement Shell运行Connect-DPMServer <DPM Server Name>
cmdlet时,命令成功,我能够连接到服务器。
但是,当我在脚本中包含相同的命令并通过DPM Management 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
与Get-DPMProtectionGroup
等其他DPM cmdlet类似。
我在Windows Server 2008 R2上运行Powershell 2.0版。
这种奇特行为的原因是什么?我该如何解决这个问题?
修改
我做了一些观察。我的脚本有两部分:一个包装器脚本和一个帮助器脚本,它由包装器脚本作为一个独立的工作调用。
所有DPM命令都在包装器脚本中标识,但在作为作业运行时,它们不会在帮助程序脚本中标识。
为什么会出现这种情况的任何解释以及解决此问题的任何建议?
答案 0 :(得分:1)
我找到了解决方案,现在是:
发生了什么 包装器脚本在DPM PowerShell中运行,然后作为单独的作业或线程调用帮助程序脚本。运行此帮助程序脚本的环境是Windows native 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。通过dot-sourcing将此文件包含在帮助程序脚本中。这意味着,帮助程序脚本的第一行应如下所示:."D:\DPM\DPM\bin\dpmcliinitscript.ps1"
这将有助于调用的shell识别特定于DPM的命令。