2016-12-13 3 views
0

ワイルドカード*_HELP_instructions*のサーバー上のすべての共有を検索するPowerShellスクリプトを探しています。検索するファイルの例は、12_HELP_INSTRUCTIONS.txtまたは22_HELP_INSTRUCTIONS.htmlです。すべてのサーバー共有でワイルドカードファイル名を検索する

これまでのところ、C:\の内容を検索する以下のスクリプトがありますが、代わりにサーバー共有を検索するように設定できるスクリプトが必要です。

$FilesToSearch = Get-ChildItem "C:\*" -Recurse -ErrorAction SilentlyContinue | 
       where {$_.Name -like "*_HELP_instructions*"} 

if ($FilesToSearch -ne $null) { 
    Write-Host "System Infected!" 
    exit 2015 
} else { 
    Write-Host "System Not Infected!" 
    exit 0 
} 
+0

リモートサーバー上の特定の共有に対してスクリプトを実行しますか?いいえ、すべてのコメントを考慮に入れてください。すべての株式?ローカルにサーバーのすべての共有フォルダにある? –

+0

こんにちはAnsgar、スクリプトはサーバー上でローカルに実行されるので、特定のサーバーのすべてのローカル共有をスキャンする必要があります –

答えて

0

利用Get-WmiObjectサーバー上の共有フォルダを列挙する:

$exclude = 'Remote Admin', 'Remote IPC', 'Default share' 
$shared = Get-WmiObject Win32_Share | 
      Where-Object { $exclude -notcontains $_.Description } | 
      Select-Object -Expand Path 

Where-Object句は、(そうでなければ、単純にすべてのローカルドライブをスキャンできます)スキャン対象から管理共有を除外します。

その後のパスの結果リストでGet-ChildItemを呼び出す:あなたのフィードバックのための

$FilesToSearch = Get-ChildItem $shared -Filter '*_HELP_instructions*' -Recurse -ErrorAction SilentlyContinue 
+0

Ansgar、これは大変感謝しています。これを私のスクリプトとその作業に加えました –

0

ForEach Loopを使用すると、検索が必要なすべてのパスをループすることができます。

$paths = Get-Content C:\Temp\Pathlist.txt 

Foreach($path in $paths){ 
    $Filestosearch = Get-ChildItem $path -Recurse -ErrorAction SiltenlyContinue| where {$_.Name -like "*_HELP_instructions*"} 
    If($FilesToSearch -ne $null) { 
     Write-Host "System Infected!" 
    $Filestosearch | Export-Csv c:\Temp\Result.csv -NoTypeInformation -Append 
    } else { 
     Write-Host "System Not Infected!" 
     } 
} 

C:\Temp\PathList.txtファイル内の各$pathを通じてこれがループ。 (例:C:\*または\\ServerName\MyShare\*

次に、出力をC:\Temp\Result.csvにプッシュします。システムが感染している場合。

これは、txtファイルに格納するパスの数に応じて実行に時間がかかります。しかし、それはあなたが何をしているかを達成するでしょう!

希望すると便利です。

+0

HI Lachie、ご意見ありがとうございます。私はPowershellに触れたことはありませんが、上記のスクリプトは、ファイル名をスキャンしてシステムがクリーンか感染しているかどうかを報告する必要があるという意味で、プロセスを実行する必要があります。コードを自分のコードスニペットで詳しく説明します。理想的には、私はちょうどC:\の代わりにローカルサーバーの共有をスキャンし、現在のスクリプトと同じ方法で結果を出力する必要があるかどうかを、スクリプトスニペットに近づけておく必要がありますか? –

+0

こんにちは@マークスミス、いつもパワーサルを使っている人にはいいですね!上記のコードを**編集しました**以前使用したスニペットを反映します。感染しているかどうかは画面に出力されます。感染している場合は、その情報をCSV –

+0

こんにちはLachieさん、こんにちはLachieさん、これはもっと有望な:)最後の要求を探している、スクリプトは、そのtxtファイルに依存するのではなく、自己のサーバーのローカル共有を識別する方法はありますか?手動で入力した共有?サーバー数が2つしかない場合でも問題はありませんが、クライアントベースで多数のサーバーをサポートしています。 –

0

どうもありがとうございましたみんな。

$exclude = 'Remote Admin', 'Remote IPC', 'Default share' 
$shared = Get-WmiObject Win32_Share | 
     Where-Object { $exclude -notcontains $_.Description } | 
     Select-Object -Expand Path 

$FilesToSearch = Get-ChildItem $shared -Filter '*_HELP_instructions*' -Recurse -ErrorAction SilentlyContinue 

If($FilesToSearch -ne $null) 

{ 
Write-Host "System Infected!" 
exit 2015 
} 

else 

{ 
Write-Host "System Clear!" 
exit 0 
} 
関連する問題