2016-09-08 16 views
0

私たちが扱っているソフトウェアは、ソフトウェアのステータス(たとえば、マスターまたはスレーブで実行中の場合)を含むJSONストリームを出力します。PowerShellの条件付きタグと変数

私はpowershellを使用してこのデータを取得していますが、そこからデータベースやその他のものに投稿していますが、これはこの特定の質問にはあまり関係ありません。

私はWeb開発者のバックグラウンドから来たので、私はPHPの条件文、変数などに精通しています。しかし、PowerShellの見た目では動作が異なるようです。私はPowershellの新機能です。

そこで以下のスニペットの前提は、ということである:それは、ヘッダと(ヘッダIP付き)内部IPアドレスと位置の名前(の最初の3つのオクテットを含むCSVを読み取る

  • サイト)。
  • CSVの内容に対してforeachループを実行し、条件文を実行して、最初にTEST-CONNECTIONを使用してマシンがオンラインになっているかどうかを判断します。
  • プライマリ/マスターがオンラインの場合はステータスを表示し、そうでない場合はセカンダリ/スレーブをチェックしてステータスを表示するか、両方ともオフライン(最初の2つは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 

は今、私は確かに$ステータスの正しい出力は、しかし、それはまた、私は何かにおそらく二回目を表示していますのですか選択/展開からの出力を隠すために欠落。

$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

あなた$primary$secondaryは、あなたが接続をテストしようとする時には、 "$ ip.205"/"$ ip.210" を含むありがとう。一重引用符の内部の変数は解釈されません。 あなたはそれが動作するはずです。このように変更した場合:

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

または

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

そして、それはそれと同じくらい簡単です!トリックをしたポールありがとうございました。 – user6808274