2016-12-13 4 views
0

Je suis à la recherche d'un script PowerShell qui recherchera tous les partages sur un serveur pour un caractère générique de *_HELP_instructions*. Un exemple de fichier qu'il chercherait serait 12_HELP_INSTRUCTIONS.txt ou 22_HELP_INSTRUCTIONS.html. Jusqu'à présent, j'ai le script ci-dessous qui va chercher le contenu de C: \, mais j'ai besoin d'un script que je peux configurer pour rechercher des partages de serveur à la place.Rechercher tous les partages serveur pour un nom de fichier générique

$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

Voulez-vous exécuter le script sur un partage particulier sur un serveur distant? Toutes les actions? Localement sur tous les dossiers partagés d'un serveur? –

+0

Salut Ansgar, le script sera exécuté localement sur un serveur, donc il faut scanner toutes les actions locales de ce serveur spécifique –

Répondre

0

Utilisez Get-WmiObject pour énumérer les dossiers partagés sur le serveur:

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

La clause Where-Object exclut les actions administratives d'être numérisées (sinon vous pouvez simplement analyser tous les lecteurs locaux).

Ensuite, appelez Get-ChildItem avec la liste résultante des chemins:

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

Ansgar, merci beaucoup pour cela, c'est exactement ce que je suis après. ajouté cela à mon script et son travail un régal –

0

Vous pouvez utiliser un ForEach Loop à boucle à travers tous les chemins que vous devez effectuer la recherche.

$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!" 
     } 
} 

Cette boucle permet de faire défiler chaque $path dans le fichier C:\Temp\PathList.txt. (Par exemple C:\* ou \\ServerName\MyShare\*)

Ensuite, poussez la sortie vers C:\Temp\Result.csv. Si le système est infecté.

Cela prendra un certain temps à s'exécuter selon le nombre de chemins que vous avez mis dans le fichier txt. Mais il atteindra ce que vous êtes après!

Espérons que cela aide!

+0

HI Lachie, merci pour vos commentaires. Je n'ai jamais vraiment touché Powershell avant mais le script ci-dessus est à peu près comment j'ai besoin du processus pour fonctionner, dans le sens où j'en ai besoin pour scanner un nom de fichier et ensuite signaler si le système est propre ou infecté code comme détaillé dans mon extrait de code. Idéalement, je dois garder l'extrait de script aussi proche de ce qu'il est actuellement que j'en ai juste besoin pour analyser un partage de serveur local au lieu d'un C: \ et afficher le résultat de la même manière que mon script actuel si c'est possible? –

+0

Salut @ MarkSmith, Toujours bon d'avoir une autre personne en utilisant PowerShell! J'ai ** modifié le code ci-dessus ** pour refléter l'extrait que vous avez utilisé précédemment. Il va maintenant sortir à l'écran s'il est infecté ou non. Si elle est infectée stocker cette information dans le CSV –

+0

Salut Lachie, cela semble plus prometteur :) une dernière demande, est-il possible que le script peut identifier les partages locaux du serveur par lui-même au lieu de compter sur un fichier txt avec le part manuellement tapé? Ce ne serait pas un problème si nous n'avions que quelques serveurs mais nous prenons en charge de nombreux serveurs dans notre base de clients. –

0

Merci les gars beaucoup pour vos commentaires. En tenant compte de tous vos commentaires le code final était le suivant:

$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 
}