【发布时间】:2021-02-22 23:04:38
【问题描述】:
我有一个运行 Windows Server 2008 R2 并安装了 Zabbix 代理的 VM。 如果它正在运行,我想运行特定的代码块。 我手动启动了服务。 当我登录到 VM 时,打开 PowerShell Prompt 并输入以下 sn-p,它可以正常工作:
$ZABBIX_INSTALLED = Get-Service "Zabbix Agent"
If ($ZABBIX_INSTALLED) {
Write-Host "It's running"
}
else {
Write-Host "Zabbix Agent is not running"
}
问题是当我尝试将其作为脚本调用时,即使进程正常运行,它也永远不会返回 true(我在任务管理器中检查过)。
对代码发生了什么有什么建议吗?感谢您的帮助。
PS:我通过 Azure Runbook 通过运行 Invoke-AzRunCommand 并将脚本作为参数传递来传递此脚本。
【问题讨论】:
-
您显示的代码没有返回任何东西;如果要输出一个布尔值指示服务是否正在运行,请使用
[bool] $ZABBIX_INSTALLED -
@mklement0,如果有对象或值,
If ($ZABBIX_INSTALLED)不会返回 true 吗?我一直都这样使用if ($variable)。 -
它不返回真值。它可以评估为真实条件。如果您想返回 true,请执行
if($variable){$true}else{$false} -
我觉得布尔评估不是这里的最佳选择。如果服务存在,即使它没有运行,现有的 if 语句也会触发。可能会更舒服:
If ($ZABBIX_INSTALLED.Status -eq 'Running' ) { Write-Host "It's running" } -
我认为 OP 意味着
Write-Host "It's running"永远不会被执行。在我看来,没有找到以“Zabbix Agent”为名称的服务。
标签: powershell windows-server azure-runbook