Meilleur auteur de réponses
[POWERSHELL] Récupérer l'arborescence d'un dossier dans plusieurs postes

Question
-
Bonjour,
j'ai besoin de récupérer la liste des répertoires contenu dans un dossier dans plusieurs poste.
$list = Import-CSV -Path "./poste.txt" ForEach ($list in $list) { get-ChildItem \\$list\c$\program files\adobe }
Après le must serait de le mettre dans un fichier csv en mettant le nom du poste...
Mais pour l'instant ça marche pas et je vois pas ou est l'erreur de syntaxe...
Merci par avance de votre aide
cordialement.
- Déplacé Boris Ivanov _ jeudi 20 novembre 2014 09:24 PowerShell
Réponses
-
Oups,
Je corrige, je suis allé trop vite
$list = "c$\power\"
C'est normal, voici la bonne version :
$machine = get-content "c:\power\machines.txt"
$date=(get-date).Date.ToLongDateString()
ForEach ($machines2 in $machine) {
$machines2+";"+(get-ChildItem \\$machines2\$list) |out-file "c:\power\$date.txt" -encoding ascii -append
}
Pour les administrateurs, je corrige depuis le début du sujet. Mes excuses, il manquait le mappage sur le poste distant.
- Modifié Thierry.BT jeudi 20 novembre 2014 12:09
- Marqué comme réponse trunksdu75 jeudi 6 août 2015 14:23
Toutes les réponses
-
ForEach ($list in $list) {
get-ChildItem \\$list\c$\program files\adobeIl faut le faire de la façon suivante :
ForEach ($list2 in $list) {
get-ChildItem \\$list2\c$\program files\adobe
Une fois Ok, nous regarderons pour la suite si cette solution vous convient. -
Ca ne marche pas :(
Il me met ça comme code erreur :Get-ChildItem : Impossible de trouver le chemin d'accès « », car il n'existe pas.
Get-ChildItem : Impossible de trouver le chemin d'accès « », car il n'existe pas.
Au niveau de ligne : 2 Caractère : 18
+ get-ChildItem <<<<
+ CategoryInfo : ObjectNotFound:[Get-ChildItem], ItemNotFound
Exception
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Merci par avance.
Bien cordialement. -
ForEach ($list in $list) {
get-ChildItem \\$list\c$\program files\adobeIl faut le faire de la façon suivante :
ForEach ($list2 in $list) {
get-ChildItem \\$list2\c$\program files\adobe
Une fois Ok, nous regarderons pour la suite si cette solution vous convient.Il faut échapper le $ du c$.
:
ForEach ($list2 in $list) { get-ChildItem \\$list2\c`$\program files\adobe
-
-
Il y a plusieurs façons de faire avec powershell.
Répertoire : C:\power
Je vous propose celle là :
$list = "c:\power\" ## le chemin vers le répertoire à contrôler
$machine = get-content "c:\power\machines.txt" ## Le nom des machines à contrôler
ForEach ($machines2 in $machine) {
get-ChildItem $list
}
Je viens de créer ça sur mon poste, et j'ai ça à l'affichage :
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 20/11/2014 10:58 9 machines.txt
-a--- 20/11/2014 10:48 9 poste.csv.txt -
Désolé mais ça correspond à ma problèmatique.
En fait, le nom du poste change en fonction de ce qu'il trouve dans le fichier .txt. C'est vraiment là pour moi la difficulté. J'ai besoin, si le fichier contient 130 nom de poste, me sorte un listing du répertoire 130 fois....
J'ai du mal, à voir comme négocier cette partie.
En tout cas merci encore pour le temps que tu m'accords
-
Bonjour,
Ce script fonctionne bien chez moi:
$list = get-content -Path "c:\txt.txt" ForEach ($i in $list) { get-ChildItem -path "\\$i\c$\Temp" }
A+
L’information n’a de valeur que si elle est partagée!! AK
- Modifié Ahmed KASMI jeudi 20 novembre 2014 10:45
- Proposé comme réponse Ahmed KASMI jeudi 20 novembre 2014 11:38
-
Ok
Mais c'est bien ce que j'ai compris.
$list = "c$\power\"
Si vous voulez un script complet, il faut utiliser de cette manière :
$machine = get-content "c:\power\machines.txt"
$date=(get-date).Date.ToLongDateString()
ForEach ($machines2 in $machine) {
$machines2+";"+(get-ChildItem \\$machines2\$list) |out-file "c:\power\$date.txt" -encoding ascii -append
}
localhost;machines.txt poste.csv.txt
Vous allez avoir la liste pour chaque machine, le nom du fichier créé est à la date du jour.
Voici le résultat sur ma machine (je renseigne 3 fois le nom de ma machine pour que vous puissiez voir le résultat sur plusieurs lignes) :
localhost;machines.txt poste.csv.txt
localhost;machines.txt poste.csv.txt
- Proposé comme réponse Ahmed KASMI jeudi 20 novembre 2014 11:38
- Modifié Thierry.BT jeudi 20 novembre 2014 12:10
-
Je vous propose celui-ci, il faut par contre avoir le remote management actif sur les destinations.
Param( [string] $output, [string] $input, [string] $tdir ) $servers = Get-content $input invoke-command -ComputerName $servers -ScriptBlock {Param($tdir) Get-ChildItem $tdir } -ArgumentList $tdir | select PSComputerName,name | convertto-csv | Out-File $output
Si vous voulez une sortie par serveur :
Param( [string] $output, [string] $input, [string] $tdir ) $servers = Get-content $input $r = invoke-command -ComputerName $servers -ScriptBlock {Param($tdir) Get-ChildItem $tdir } -ArgumentList $tdir | select PSComputerName,name $r | Group-Object PSComputerName | foreach { $_.group | convertto-csv | Out-File ($_.name + '_ $($output).csv' }
Bruce Jourdain de Coutance - Consultant MVP Exchange http://blog.brucejdc.fr
-
Merci pour votre aide.
Thierry, je comprend toujours pas comment on fait pour a chaque tout de boucle, cela chèque un nouveau poste.
Là, le script chèque que mon pc maitre.
En fait au niveau du chemin il faudrait quelques choses \\$poste\c$\program files\adobe
Parce que en faisant, ça il me colle tous les noms de poste à la suite des autres. Alors peut-être que dans mon fichier, je dois mettre une séparation comme des ";". Et lui dire, à chaque fois que tu vois ";" recommence ton action.
Et ce qui est très bizarre, c'est que dans le fichier de sortie, j'ai que le nom des postes qui sont mis, et non le résultat de la commance
Bruce, c'est trop compliqué pour moi. :(. Je ne vois même pas ce qu'il faut modifier.
- Modifié trunksdu75 jeudi 20 novembre 2014 11:28
-
Vous avez quoi comme valeur pour cette variable ?
$list = "c$\power\"
C'est ici que vous devez donner le nom du répertoire. Pas celui du poste.
Ce qu'il faut comprendre, c'est cette partie :
$machine = get-content "c:\power\machines.txt"
Par la suite, le script dit simplement :
Tu fais une boucle et tu parcours l'ensemble des noms de machines contenus dans le fichier machines.txt. Pour chaque machine, tu viens chercher le contenu du répertoire $list (ex : c:\power\ sur ma machine)
Et tu renseignes ça dans le fichier sous la forme nomdemachine + contenu du répertoire parcouru.
Premier passage dans la boucle Foreach =
1er nom de machines contenu dans la liste machines.txt + chemin d'accès du répertoire soit : machine xxx + contenu de c:\power\
Second passage = second nom + chemin du répertoire ...etc
Mieux avec l'explication ?
- Modifié Thierry.BT jeudi 20 novembre 2014 12:11
-
\\'parw00161442; parw00133400'\c$\program files\adobe
sachant que j'ai mis '$list = "\\'$machine'\c$\program files\adobe"'
Merci pour l'explication. Mais ce que je comprends pas, tout ce passe bien. Mais quand je vérifie il me liste uniquement, ce qui y'a dans le répertoire de mon poste, et non de ceux indiquer dans mon fichier.
- Modifié trunksdu75 jeudi 20 novembre 2014 11:46
-
-
OUi ça marche comme ça :)
Mais ça ne lit quand dans mon répertoire local. et non sur les postes distant.
Mon fichier ressemble à ça :
PARW00161442;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash Player
PARW00161047;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash Player
PARW00142164;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash Player
PARW00141499;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash Player
PARW00151300;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash Player
PARW00142455;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash Player
PARW00161176;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash Player
PARW00153341;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash Player
PARW00142110;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash Player
PARW00161048;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash Player
PARW00161208;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash Player
PARW00161267;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash Player
PARW00150990;Adobe Captivate Quiz Results Analyzer 1.5 Adobe Captivate Reviewer 2.5 Adobe Help Adobe Photoshop CS4 Adobe Reader 10.1 Adobe Utilities Flash PlayerJ'ai bien le nom de poste qui change. Mais le répertoire checker et toujours le mien en local :(
Le pire c'est que je sens qu'on est tout proche. Encore merci pour ta patience.
- Modifié trunksdu75 jeudi 20 novembre 2014 11:57
-
Oups,
Je corrige, je suis allé trop vite
$list = "c$\power\"
C'est normal, voici la bonne version :
$machine = get-content "c:\power\machines.txt"
$date=(get-date).Date.ToLongDateString()
ForEach ($machines2 in $machine) {
$machines2+";"+(get-ChildItem \\$machines2\$list) |out-file "c:\power\$date.txt" -encoding ascii -append
}
Pour les administrateurs, je corrige depuis le début du sujet. Mes excuses, il manquait le mappage sur le poste distant.
- Modifié Thierry.BT jeudi 20 novembre 2014 12:09
- Marqué comme réponse trunksdu75 jeudi 6 août 2015 14:23
-
-
Avec plaisir.
La solution de Bruce est beaucoup plus souple, mais demande une connaissance un peu plus poussée de Powershell. A creuser pour vous par la suite.
N'hésitez pas à cliquer sur "Proposer comme réponse" au dessous de la solution, c'est important pour les participants.Cordialement
-
Avec plaisir.
La solution de Bruce est beaucoup plus souple, mais demande une connaissance un peu plus poussée de Powershell. A creuser pour vous par la suite.
N'hésitez pas à cliquer sur "Proposer comme réponse" au dessous de la solution, c'est important pour les participants.Cordialement
J'aimerai bien mais je peux pas :/ -