从CMD运行PowerShell脚本时出现异常行为

从CMD运行PowerShell脚本时出现异常行为,powershell,Powershell,在ISE和CMD提示符下运行PowerShell脚本时,我遇到了行为上的差异 该脚本用于检查Microsoft DPM数据保护管理服务的活动警报。如果发现时间超过12小时,则会在“DPM警报”事件日志中记录错误 我在ISE中开发了脚本,它似乎工作得很好。所以我把它添加到计划任务中,在那里它没有做我想做的事情。我最终剥离了测试警报年龄的逻辑,所以我所做的只是试图获得当前活动警报的列表 $serverName = "my_server_name" $dpmServer = Connect-DPMS

在ISE和CMD提示符下运行PowerShell脚本时,我遇到了行为上的差异

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

我在ISE中开发了脚本,它似乎工作得很好。所以我把它添加到计划任务中,在那里它没有做我想做的事情。我最终剥离了测试警报年龄的逻辑,所以我所做的只是试图获得当前活动警报的列表

$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�

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

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


有什么区别吗?

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

我添加了一个循环,效果是while$警报,并在循环中运行refreshAlerts和alertController.ActiveAlerts。大约10秒钟后,我能够看到活动警报并对其采取行动

$serverName = "my_server_name"

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

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

在ISE中运行时,变量在两次运行之间保持不变,因此有足够的时间进行连接。当使用powershell-file scriptname调用时,shell会在连接发生之前退出

如果这可以从ISE中实现,那么我认为它可以在不使用PSC1控制台文件的情况下实现。您是否在ISE中手动加载管理单元?最好只是在脚本中添加管理单元。我发现了这个问题。从使用Connect DPMServer连接到dpm服务器到您可以看到警报之间似乎有一点延迟。我添加了一个循环,效果是while$警报,并在循环中运行refreshAlerts和alertController.ActiveAlerts。大约10秒钟后,我能够看到活动警报并对其采取行动。在ISE中运行时,变量在两次运行之间保持不变,因此有足够的时间进行连接。当使用powershell-file scriptname调用时,shell在连接发生之前退出。好的,请将您的注释作为答案。