PowerShell中的条件标记和变量

时间:2016-09-08 09:14:36

标签: powershell variables conditional

我们使用的软件输出具有软件状态的JSON流(例如,如果它在主服务器或从服务器上运行)。

我使用PowerShell来获取这些数据,并且从那里我将其发布到数据库或其他内容,但这与这个特定问题并不真正相关。

我来自Web开发人员背景,因此我熟悉PHP中的条件语句,变量等。但是,对于PowerShell来说,它的外观似乎有所不同。我对Powershell很陌生。

以下片段的前提是:

  • 它读取一个CSV,其中包含内部IP地址的前三个八位字节(标题为IP)和位置名称(标题为SITE)。
  • 在CSV的内容上运行foreach循环,然后运行条件语句,首先使用TEST-CONNECTION确定机器是否在线。
  • 如果主/主在线,则显示其状态,否则检查辅助/从属并显示其状态,或两者是否处于脱机状态(前两个是从JSON提要中获取)只需显示全部离线
  • 在每个foreach结束时,只需编写 - 托管变量$ status

目前它无视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
}

谢谢

1 个答案:

答案 0 :(得分:0)

您尝试测试连接时$primary$secondary包含“$ ip.205”/“$ ip.210”。单引号内的变量不会被解释。 如果你把它改成它应该有效:

$primary="$ip.205"
$secondary = "$ip.210"

$primary = $ip + '.205'
$secondary = $ip + '.210'