0

正しいファイアウォール ルールが実装され、フローが機能していることを確認しようとしています。検索しましたが、解決策が見つからないようです。私はPowerShellを使用して、単純に見えるサーバーのリストに対するPortQryリクエストを(その役割に基づいて)自動化しています。しかし、引数を正しく PortQry に渡すことができず、PortQry ヘルプ画面が表示されません。

これが私の機能です:

  Function CheckPorts($x,$y,$z) {
    PortQry -n $x -p $y -o $z | Out-File $ResultsFile -Append
    }

そして、これは、CSV によって作成され、インポートされた配列を反復処理するために使用している ForEach ループです。

  $Type = TCP      
   Foreach ($Server in $ServerRoleArray.Role1) {
            if ($Server -ne "") {
            CheckPorts $Server $Type $Role1Ports
        }

追加情報:$Server配列から変数を正しく 抽出していないようです。これが私のインポートです:

$ServerRoleArray = Import-CSV $FilePath\Servers.csv

私の Servers.csv は次のようになります。

Role1,Role2
google.com,msn.com
yahoo.com,

想い?? ところで、これをpowershell v2およびv3で試しました

4

2 に答える 2

0

ForEach ループが間違っていました。2 つの問題がありました。まず、null チェックが正しくなく、列の呼び出しが正しくありませんでした。これは正しいループです:

ForEach ($Server in $ServerRoleArray) {
    if (!$Server.Role1) {
    break
    } else {
    CheckPorts $Server.Role1 "TCP" $Role1Ports
    }
}
于 2014-09-15T02:55:05.127 に答える
0

これは、コマンド ライン パラメータが に送信され、期待どおりに表示されないという問題であると確信してPortQryいます。私はまだあなたがどのように$Role1Ports見えるかを知らないので、それがあなたの悩みの原因かもしれません. このように宣言されていると仮定します$Role1Ports = "80,443"

Function CheckPorts($x,$y,$z) {
    PortQry -n $x -p $y -o `"$z`" | Out-File $ResultsFile -Append
}

$ServerRoleArray = Import-Csv C:\temp\server.tkt.txt
$Role1Ports = "80,443"

$Type = "TCP"      
Foreach ($Server in $ServerRoleArray.Role1) {
    if ($Server -ne "") {
    CheckPorts $Server $Type $Role1Ports
    }
}

"TCP"文字列として解釈されるように引用符を付ける必要があります。私が見ることができる ForEach ループに問題はありません。テスト例のデータを使用しましたが、正常に処理されました。ポートも適切に渡されるよう$zに、関数をまとめました。これは、オンラインで見つけたPortQryの例に従って行われましたCheckPortsz$

$Role1Ports が次のようになっている場合、$Role1Ports = 80,443または何らかの形式の配列である場合は、これらのいずれかを実行でき、上記で使用したコードは引き続き機能します。

$Role1Ports = $Role1Ports -join ","

また

$Role1Ports = 80,443 -join ","

得られるはずのコマンド出力は、次のようなものです。

PortQry -n google.com -p TCP -o "80,443"
PortQry -n yahoo.com -p TCP -o "80,443"

別の回答なので

ロジックは正常に機能していたのに、なぜロジックに問題があったのかわかりません。あなたのコメントに基づいて、別のテキストファイルを使用しました。

Role1,Role2
,msn.com
google.com,
yahoo.com,

if ($Server -ne "")ステートメントがあっても、それはまだ機能していました。if ($Server)も機能したでしょう。

于 2014-09-13T17:33:17.690 に答える