2016-06-10 2 views
1

J'ai essayé d'obtenir une liste de répertoire très spécifique sans succès jusqu'à présent.Liste de répertoire de deux niveaux avec Powershell

Disons que j'ai une structure de dossiers comme celui-ci:

  • C: \ inetpub \ updates \ updatefolder1
  • C: \ inetpub \ updates \ updatefolder1 \ Web \
  • C: \ inetpub \ mises à jour \ updatefolder1 \ Web \ (code du site, la structure continue)
  • C: \ inetpub \ updates \ updatefolder1 \ scripts \ (scripts db)
  • C: \ inetpub \ updates \ updatefolder2
  • C: \ inetpub \ updates \ updatefolder2 \ Web \ (code du site, la structure continue)

Maintenant, quand je l'utilise foreach, il ressemblera à ceci:

$folders = Get-ChildItem $UpdateDir -Directory -Recurse -Depth 1 | Select-Object FullName 

ForEach($folder in $folders) { 
    $folder = folder.TrimStart("@{FullName=").TrimEnd("}") #To get a clean name 
} 

le résultat être comme suit:

C:\inetpub\updates\updatefolder1 
C:\inetpub\updates\updatefolder2 
C:\inetpub\updates\updatefolder1\Web\ 
C:\inetpub\updates\updatefolder1\Web\ (site code, the structure goes on) 
C:\inetpub\updates\updatefolder1\Scripts\ (db scripts) 
C:\inetpub\updates\updatefolder2\Web\ (site code, the structure goes on) 

Ce qui n'est pas correct. Il devrait ressembler à ceci:

C:\inetpub\updates\updatefolder1 
C:\inetpub\updates\updatefolder1\Web\ 
C:\inetpub\updates\updatefolder1\Web\ (site code, the structure goes on) 
C:\inetpub\updates\updatefolder1\Scripts\ (db scripts) 
C:\inetpub\updates\updatefolder2 
C:\inetpub\updates\updatefolder2\Web\ (site code, the structure goes on) 

Toutes les idées fraîches? J'ai essayé plusieurs choses, autres que foreach loop, toujours pas de chance.

Merci d'avance.

+0

1. Le code que vous avez posté ici semble avoir beaucoup de fautes de frappe. 2. Qu'essayez-vous d'accomplir? 3. Les deux résultats que vous avez affichés en question semblent identiques sauf la séquence/l'ordre. Pouvez-vous s'il vous plaît vérifier une fois et confirmer? – SavindraSingh

+0

Le problème est le hack horrible que vous utilisez pour obtenir le nom complet. Supprimez toute la boucle 'ForEach' et remplacez la première ligne par' $ folders = Get-ChildItem $ UpdateDir -Directory -Recurse -Depth 1 | Select-Object -Expand FullName' – TheMadTechnician

+0

@SavindraSingh Typos? Où ? Autre que le fait que j'ai oublié d'ajouter la variable pour réellement sortir. – Ramil

Répondre

0

La boucle ForEach n'est pas nécessaire; elle peut être remplacée par -expandproperty dans l'objet select. Si j'ai bien compris la question, la question que vous soulevez est que les résultats ne sont pas triés. La réponse est de trier les résultats en utilisant `Sort-Object »

Exemple

$folders = Get-ChildItem $UpdateDir -Directory -Recurse -Depth 1 | 
    Select-Object -ExpandProperty fullname | 
    Sort-Object 
$folders 
+0

Merci! C'est exactement ce que je voulais sortir de ça. Et désolé pour la pauvre explication, je crains d'expliquer les choses, je serais le professeur le plus crade. C'est aussi pourquoi j'ai ajouté la représentation visuelle. J'ai essayé de le casser pendant une semaine et la solution était si simple, putain. – Ramil