2016-10-01 11 views
0

私はPowerShellスクリプトを作成しようとしています(対象レベルのOS 2008 R2)1.無効にする方法/ポートの配列</li> <li>リストを関連するポート番号

  1. 実行されることに基づいて、Windowsファイアウォールのルールを有効にします各「ルール名」現在の状態に基づいて、有効または無効のいずれかのポリシーによって配列現在ここで立ち往生
  2. 実行にポート
  3. キャプチャ「ルール名」に関連付けられているすべてのファイアウォールポリシー。

私は上記の私のリストのポイント3で立ち往生しています。誰かを助けることができますか、あるいは正しい方向に私を指示することができますか?

現在のコード:私の現在のスクリプトに基づいて結果の

$array = @("3050", "300", "8080","7080","5090") 
for ($i=0; $i -lt $array.length; $i++) { 
    $searchPort = "(LocalPort.*" + $array[$i] + ")" 
    $front = netsh advfirewall firewall show rule dir=in name=all | 
      Select-String -Pattern ($searchPort) -Context 9,4 
    Write-Host $front 
} 

コピー:

Rule Name:       interbase port 
---------------------------------------------------------------------- 
Enabled:        Yes 
Direction:       In 
Profiles:        Domain,Private,Public 
Grouping: 
LocalIP:        Any 
RemoteIP:        Any 
Protocol:        TCP 
LocalPort:       3050 
RemotePort:       Any 
Edge traversal:      No 
Action:        Allow 

Rule Name:       MT 
---------------------------------------------------------------------- 
Enabled:        Yes 
Direction:       In 
Profiles:        Domain,Private,Public 
Grouping: 
LocalIP:        Any 
RemoteIP:        Any 
Protocol:        UDP 
LocalPort:       300 
RemotePort:       Any 
Edge traversal:      No 
Action:        Allow 

Rule Name:       medtech port 
---------------------------------------------------------------------- 
Enabled:        Yes 
Direction:       In 
Profiles:        Domain,Private,Public 
Grouping: 
LocalIP:        Any 
RemoteIP:        Any 
Protocol:        UDP 
LocalPort:       300 
RemotePort:       Any 
Edge traversal:      No 
Action:        Allow

答えて

0

は、単にあなたの試合の前のコンテキストからルール名を抽出します。前後の文脈からいくつかの要素を扱いたいと思うので、Select-Stringの出力をForEach-Objectの変数に集める代わりに配管することをお勧めします。次に、ファイアウォールルールを切り替えることができます。

$toggle = @{ 
    'yes' = 'no' 
    'no' = 'yes' 
} 

netsh ... | Select-String -Pattern $searchPort -Context 9,4 | ForEach-Object { 
    $rule = $_.Context.PreContext[0] -replace 'rule name:\s*' 
    $enabled = $_.Context.PreContext[2] -replace 'enabled:\s*' 

    & netsh advfirewall firewall set rule name="$rule" new enable=$($toggle[$enabled]) 
} 
+0

はい=いいえ=はい –

+0

本当にありがとうございました! QTにいれば、ニュージーランドにはビールがあります! –

+1

こんにちは、 追加した簡単なメモ私はので、私はこのように行ってきました新しい変数をしたトグルがパススルーしなかったことに「有効」が見つかり: \tのnetsh ... | Select-String -Pattern $ searchPort - テキスト9,4 | 。をForEach-Objectに{ \t \t $ルール= $ _ Context.PreContext [0] -replace 'ルール名:\ * S'。有効 \t \t $有効= $ _ Context.PreContext [2] -replace」:\ S *」 \t \t $ newstatus = $トグル[$有効] \t \t&netshをadvfirewallをファイアウォール設定ルール名を= "$ルール" 新しいイネーブル= "$のnewstatus" については申し訳ありません \t} おかげで再び –

関連する問題