2015-04-23 1 views
1

J'ai le code PowerShell 2.0 suivant qui fonctionne principalement.Powershell Liste récursive des fichiers pour les types spécifiques et inclure dans la chaîne

#$UserProfilePath is the path to recursively search 
    $MailBody = $MailBody + "`r`n`r`n Potential Valuable Files located in     $NLEFriendlyName's profile include:`r`n`r`n" 
    $FileList = get-childitem -path $UserProfilePath -Recurse 
    ForEach ($File in $FileList) { 
    if ($File.Extension -eq ".doc") {$UsefulFiles = $UsefulFiles + "`r`n" + $File.name} 
    elseif ($File.Extension -eq ".docx") {$UsefulFiles = $UsefulFiles + "`r`n" + $File.name} 
    elseif ($File.Extension -eq ".xls") {$UsefulFiles = $UsefulFiles + "`r`n" + $File.name} 
    elseif ($File.Extension -eq ".xlsx") {$UsefulFiles = $UsefulFiles + "`r`n" + $File.name} 
    elseif ($File.Extension -eq ".ppt") {$UsefulFiles = $UsefulFiles + "`r`n" + $File.name} 
    elseif ($File.Extension -eq ".pptx") {$UsefulFiles = $UsefulFiles + "`r`n" + $File.name} 
    elseif ($File.Extension -eq ".pdf") {$UsefulFiles = $UsefulFiles + "`r`n" + $File.name} 
    elseif ($File.Extension -eq ".txt") {$UsefulFiles = $UsefulFiles + "`r`n" + $File.name} 
          } 
    $MailBody = $MailBody + $UsefulFiles 

Et il fait surtout ce que je m'attends à ce qui génère une liste de fichiers trouvés dans le répertoire de profil d'un utilisateur.

Le problème est que le retour chariot (`r`n) n'est pas toujours respecté. Ma variable $MailBody finit par ressembler à l'extrait ci-dessous où il commence bien, mais arrête de le faire.

20150114-Error.txt 
Server List.txt 
Server Port Breakdown.xlsx 
ds_time.txt 
Business Continuity - Call Center Services 2009a (2) (4)-old.pdf Business Continuity - Call Center Services 2009a (2) ....pdf New Text Document.txt Office2013Rearm.txt UserList.txt StopScreensaver.txt Testing Doc 201501081355.txt Antivirus KB.docx Antivirus-Deployment.txt 

This posting fait allusion un peu à une possibilité, mais je ne suis pas sûr sur la façon de traduire à mon script:

Je suis sûr qu'il ya une façon plus optimale pour lister toutes les extensions de fichier comme bien.

Répondre

1

J'ai également essayé de nettoyer un peu le processus de sélection.

#sample variables 
#$UserProfilePath = 'C:\Users\bob' 
#$NLEFriendlyName='bob' 

#select extensions to search 
$ext = ".doc",".docx",".xls",".xlsx",".ppt",".pptx",".pdf",".txt" 
$FileList = get-childitem -path $UserProfilePath -Recurse 
$UsefulFiles = $FileList | Where-Object {$_.extension -in $ext} | select -expand name 
$MailBody = $MailBody + "`r`n`r`n Potential Valuable Files located in $NLEFriendlyName's profile include:`r`n`r`n" 
$MailBody = $MailBody + ($UsefulFiles -join "`r`n") 
+0

Merci de me pointer dans la bonne direction pour la baie d'extension de fichier. Je pensais qu'il y aurait un moyen plus facile que ce que j'avais initialement. Sur le problème de retour chariot, il apparaît magnifique si je vois le corps du courrier dans quelque chose comme l'interface Web de GMail; Cependant, si je le fais dans Outlook 2013, le retour chariot ne semble pas être appliqué de manière cohérente et je me retrouve avec ce que j'ai posté dans mon post original. –

+0

Lorsque vous affichez l'e-mail résultant dans Outlook Web Access, il s'affiche également très bien. Quelque chose de particulier avec la façon dont le client Outlook 2013 traite le texte 'r'n. Je n'étais pas au courant de la commande -join, donc je fais quelques lectures. –

+0

J'ai trouvé une solution possible avec le problème de saut de ligne dans le client Outlook 2013. Je vais devoir l'essayer. http://stackoverflow.com/questions/136052/how-do--format-a-string-in-an-email-so-outlook-will-print-the-line-breaks –