2012-01-17 12 views
2

PowerShellのnoob質問はこちら私は、別々のリストにリストされているサーバーのグループを持っています。各サーバーには、特定のエラーをスキャンするエラーログがあります。ただし、各サーバーグループには、固有のエラーセットがあり、そのサーバーグループの特定の検索文字列を使用してスキャンします。私が基本的にやっていることは、サーバーリスト名に基づいて条件を作成し、そのサーバーグループの適切な検索文字列をマッピングすることです。私は非常に多くの条件を使用していないことにより、コードをより効率的にしたいと思いPowerShellでは、リストを検索文字列にマップする方法

$SERVER_LST_1 = "$pwd\servers\servers_1.lst" 
$SERVER_LST_2 = "$pwd\servers\servers_2.lst" 
$SERVER_LST_3 = "$pwd\servers\servers_3.lst" 

$SEARCH_STR_1 = "Error text for server group 1" 
$SEARCH_STR_2 = "Error text for server group 2" 
$SEARCH_STR_3 = "Error text for server group 3" 

$Servers1 = Get-Content $SERVER_LST_1 
ForEach ($Server1 in $Servers1) 
{ 
    $StartupErrorLog1 = Get-ChildItem -Path \\$Server1\$LOG_PATH -Include StartupError.log -Recurse | Select-String -notmatch $SEARCH_STR_1 
} 
$Servers2 = Get-Content $SERVER_LST_2 
ForEach ($Server2 in $Servers2) 
{ 
    $StartupErrorLog2 = Get-ChildItem -Path \\$Server2\$LOG_PATH -Include StartupError.log -Recurse | Select-String -notmatch $SEARCH_STR_2 
} 
$Servers3 = Get-Content $SERVER_LST_3 
ForEach ($Server3 in $Servers3) 
{ 
    $StartupErrorLog3 = Get-ChildItem -Path \\$Server3\$LOG_PATH -Include StartupError.log -Recurse | Select-String -notmatch $SEARCH_STR_3 
} 

:このような

何か。より少ないコードを使用して検索文字列を適切なサーバーグループにマッピングする、よりクリーンなアプローチがありますか?希望は意味をなさない。

答えて

3

あなたは以下のようなものにそれをリファクタリングすることができます:検索テキストとサーバーグループを関連付けるハッシュテーブルを使用して、基本的に

$groups = @{ 
"$pwd\servers\servers_1.lst"="Error text for server group 1"; 
"$pwd\servers\servers_2.lst"="Error text for server group 2"; 
"$pwd\servers\servers_3.lst"="Error text for server group 3"; 
} 
$startupErrors = @{} 
$groups.keys | %{ 
    $key = $_ 
    gc $key | %{ 
     $startupErrors[$_] = Get-ChildItem -Path \\$_\$LOG_PATH -Include StartupError.log -Recurse | Select-String -notmatch $groups["$key"] 
    } 
} 

。また、私はリファクタリングソリューションのみを提供していますが、Get-ChildItemとSelect-Stringはあなたがしたいことをしていないかもしれません。

+0

ありがとうManojlds。私はあなたのソリューションを試してみましょう。 – Keith

+0

こんにちはManojlds - フォローアップするだけで、あなたのソリューションは素晴らしい作品です!再度、感謝します!! – Keith

+0

@Keith - クール。答えとして受け入れることができます:) – manojlds

関連する問題