我们使用的软件输出具有软件状态的JSON流(例如,如果它在主服务器或从服务器上运行)。
我使用PowerShell来获取这些数据,并且从那里我将其发布到数据库或其他内容,但这与这个特定问题并不真正相关。
我来自Web开发人员背景,因此我熟悉PHP中的条件语句,变量等。但是,对于PowerShell来说,它的外观似乎有所不同。我对Powershell很陌生。
以下片段的前提是:
目前它无视IF / ELSEIF / ELSE,只显示系统离线。有什么想法吗?
$sites = Import-CSV 'D:\Batch Files\fb.csv'
Foreach ($item in $sites) {
$ip = $($item.IP)
$primary = '$ip.205'
$secondary = '$ip.210'
$site = $($item.SITE)
If (Test-Connection $primary -count 2 -quiet) {
$request = 'http://' + $primary + ':32768/Console/SystemStatus.json'
Invoke-WebRequest $request | ConvertFrom-Json |select -expand PrimaryServer | select -expand Online -outvariable status
}
Elseif (Test-Connection $secondary -count 2 -quiet) {
$request = 'http://' + $secondary + ':32768/Console/SystemStatus.json'
Invoke-WebRequest $request | ConvertFrom-Json |select -expand SecondaryServer | select -expand Online -outvariable status
}
Else {
$status = 'System Offline'
}
Write-Host $status
}
CSV内容:
IP,SITE
10.18.21,Name1
10.18.39,Name2
现在,如果我要运行下面的内容,我确实会获得$ status的正确输出,但是它也会第二次显示,可能是由于我缺少某些内容来隐藏select /的输出扩大。
$primary='10.18.21.205'
If (Test-Connection $primary -count 2 -quiet) {
$request = 'http://' + $primary + ':32768/Console/SystemStatus.json'
Invoke-WebRequest $request | ConvertFrom-Json |select -expand PrimaryServer | select -expand Online -outvariable status
Write-Host $status
}
谢谢
答案 0 :(得分:0)
您尝试测试连接时$primary
和$secondary
包含“$ ip.205”/“$ ip.210”。单引号内的变量不会被解释。
如果你把它改成它应该有效:
$primary="$ip.205"
$secondary = "$ip.210"
或
$primary = $ip + '.205'
$secondary = $ip + '.210'