1

在 ISE 中和从 CMD 提示符处运行 PowerShell 脚本时,我遇到了行为差异。

该脚本的目的是检查 Microsoft 的 DPM(数据保护管理)服务的活动警报。如果发现超过 12 小时的内容,则会在“DPM 警报”事件日志中记录错误。

我在 ISE 中开发了脚本,它似乎运行良好。所以我将它添加到Scheduled tasks,它没有做我想要的。我最终剥离了测试警报年龄的逻辑,因此我所做的只是尝试获取当前活动警报的列表。

$serverName = "my_server_name"

$dpmServer = Connect-DPMServer $serverName
$dpmServer.AlertController.RefreshAlerts()
$activeAlerts = $dpmServer.AlertController.ActiveAlerts

if  (!$activeAlerts) {"no active alerts found"}
else {$activeAlerts}

我正在通过 PSConsoleFile 加载 DPM 管理单元。我从 CMD 执行的命令如下所示:

 powershell -psconsole .\DPMConsoleFile.psc1 -file .\DPMAlertChecker.ps1�

�</p>

我知道管理单元正在正确加载,因为如果我包含仅显示 $dpmServer 对象的行,它将显示正确的信息。

如果我从 PowerShell ISE(或 DPM 命令行管理程序)运行它,它会正常工作并显示活动警报列表(如果有)。如果我使用上述语法从命令行运行它,它就不起作用。具体来说,它不会从$dpmServer.alertcenter.activealerts命令返回任何警报。

有什么区别?

4

1 回答 1

0

我发现了这个问题。Connect-DPMServer从使用连接到 DPM 服务器到您可以看到警报之间,似乎有一点延迟。

我添加了一个循环来影响while (!$alerts)和在循环内运行refreshAlerts()alertController.ActiveAlerts。大约 10 秒后,我能够看到活动警报并对其采取行动。

在 ISE 中运行它时,变量在运行之间持续存在,因此有足够的时间进行连接。当使用“powershell -file scriptname”调用时,shell 在连接发生之前退出。

于 2013-03-11T15:16:37.113 回答