Question RESOLU :Problème boucle robocopy

Plus d'informations
il y a 10 ans 7 mois #15735 par Franck B-A
Bonjour,

Je débute en powershell (depuis 2 petites semaines),
en attendant ma formation prévue d'ici qq temps je me suis dit que tester avec un vrai \"projet\" ne ferait pas de mal :)

Malgré le fait d' éplucher le forum (et purée que ça m'a aidé :lol: ), je me trouve confronté à un problème de boucle sur un robocopy.

En gros:
Je demande où se trouve les comptes à migrer via une inputbox
Je renvoie le tout dans un CSV que je trie suivant les unité (si le compte se termine par 1 ou 0 etc ...)

ensuite je demande s'il faut copié les dossiers récupérer.

c'est là que le bat blesse.
Il ne copie que le 1er dossier de la liste.

Ci-dessous le code (un peu long mais je l'optimiserai une fois toutes les notions digérées ^^) :
[code:1]
############################
#Fonction de la sélection du répertoire contenant les profils utilisateurs
###########################

$message = \"sélection du répertoire contenant les profils utilisateurs \"
$title = \"Profils APH\"

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null
$CONTAPH = [Microsoft.VisualBasic.Interaction]::InputBox(\"$message\", \"$title\" )

###########################
#Export et split des APH suivant les unités (fin des APH = 0,1...m ou g)
###########################

Get-ChildItem \"$CONTAPH\" | select-object Name | sort-object Name | Export-CSV \"C:\temp\ContAPH.csv\" -NoTypeInformation -delimiter \";\" -Encoding Unicode

$APH0 = \"C:\temp\UserAPH0.txt\"
$APH1 = \"C:\temp\UserAPH1.txt\"
$APHm = \"C:\temp\UserAPHm.txt\"
$APHg = \"C:\temp\UserAPHg.txt\"



###########################
# Suppression des caracteres et lignes inutiles
###########################

$Import = Import-CSV \"C:\Temp\ContAPH.csv\"

$Import | Where-Object { $_.Name -like \"*0\" } | Out-File $APH0
$RemLine = Get-Content $APH0 | where { $_ -ne \"$null\" } | where { $_ -notmatch \"Name\" } | where { $_ -notmatch \"----\" } | where { $_ -notmatch \"g-*\" } |where { $_ -notmatch \"m-*\" }

Set-Content $APH0 -Value $RemLine

$Import | Where-Object { $_.Name -like \"*1\" } | Out-File $APH1
$RemLine = Get-Content $APH1 | where { $_ -ne \"$null\" } | where { $_ -notmatch \"Name\" } | where { $_ -notmatch \"----\" } | where { $_ -notmatch \"g-*\" } |where { $_ -notmatch \"m-*\" }
Set-Content $APH1 -Value $RemLine

$Import | Where-Object { $_.Name -like \"g-*\" } | Out-File $APHg
$RemLine = Get-Content $APHg | where { $_ -ne \"$null\" } | where { $_ -notmatch \"Name\" } | where { $_ -notmatch \"----\" }
Set-Content $APHg -Value $RemLine

$Import | Where-Object { $_.Name -like \"m-*\" } | Out-File $APHm
$RemLine = Get-Content $APHm | where { $_ -ne \"$null\" } | where { $_ -notmatch \"Name\" } | where { $_ -notmatch \"----\" }
Set-Content $APHm -Value $RemLine

###########################
#Lancement du robocopy
###########################

$MsgBox = [Windows.Forms.MessageBox]
$Button=[Windows.Forms.MessageBoxButtons]::YesNo
$Title = \"Robocopy Profils APH\"

$click = $MsgBox::«»show(\"Voulez-vous lancer la copie des APH '0' ?\",$Title,$Button)

if ($click -eq [Windows.Forms.DialogResult]::Yes)

{
$SetRepCible = \"C:\temp\Migration\copie\"
$VarUser = Get-Content $APH0 | Select-Object -Index 0 | where { $_ -ne \"$null\" }
$RepCible = Get-Content $APH0 | Select-object -Index 0 | foreach { $_ -replace \"$_\", \"$SetRepCible\$_\"}
New-Item \"C:\temp\Migration\copie\$VarUser\" -ItemType directory
$RepSource = Get-Content $APH0 | Select-Object -Index 0 | where { $_ -ne \"$null\" } | foreach { $_ -replace \"$_\", \"$CONTAPH\$_\" }

Foreach ( $_ in $APH0 ) {

robocopy $RepSource $RepCible /E /COPY:«»DAT /NP /LOG:\"C:\Temp\Rob_logAPH0.log\" /TEE /ZB /R:5 /W:5

$SupprLine1 = Get-Content $APH0 | Select-Object -Skip 1
Set-Content $APH0 -Value $SupprLine1

}
}
else
{

$MsgBoxNo = [Windows.Forms.MessageBox]
$ButtonNo=[Windows.Forms.MessageBoxButtons]::Ok
$IconNo=[windows.forms.MessageBoxIcon]::Information
$MsgBoxNo::«»show(\"Exit\", \"\",$ButtonNo,$IconNo)
}
[/code:1]

Donc comme je le disais la boucle Robocopy + supression de la première ligne ne fonctionne pas
[code:1]
Foreach ( $_ in $APH0 ) {

robocopy $RepSource $RepCible /E /COPY:«»DAT /NP /LOG:\"C:\Temp\Rob_logAPH0.log\" /TEE /ZB /R:5 /W:5

$SupprLine1 = Get-Content $APH0 | Select-Object -Skip 1
Set-Content $APH0 -Value $SupprLine1

}
[/code:1]
J'ai beau me casser la tête et lire des posts sur les boucles et arpenter google, rien y fait je pige pas le truc
Si une âme charitable pouvait m'aiguiller !
merci beaucoup pour votre aide ;)<br><br>Message édité par: bigkifran, à: 27/09/13 12:05

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 7 mois #15737 par hahang
Réponse de hahang sur le sujet Re:Procblème boucle robocopy
salut,

Tu peux t'aider du script que j'avais fait pour lancer plusieurs robocopy sur un arborescence afin d'optimiser les temps de copie sur une arborescence complexe :
[code:1]
$userfolders = Get-ChildItem \\server\root_shared_folder | Where-Object {$_.Name -match \&quot;^[a-k]\&quot;}
foreach ($homes in $userfolders) {
if ((Get-Process -Name \&quot;robocopy\&quot;«»).count -le 10) {
[System.Diagnostics.Process]::«»Start( \&quot;robocopy\&quot;, \&quot;\\server\root_shared_folder\$homes Z:\$homes /fp /ndl /sec /mir /mt:32 /r:1 /w:1 /np /X\&quot; )
}
else {
do {sleep 1} while ((Get-Process -Name \&quot;robocopy\&quot;«»).count -ge 10)
[System.Diagnostics.Process]::«»Start( \&quot;robocopy\&quot;, \&quot;\\server\root_shared_folder\$homes Z:\$homes /fp /ndl /sec /mir /mt:32 /r:1 /w:1 /np /X\&quot; )
}
}
[/code:1]

My Powershell IT Script library powershell.nicoh.me/powershell-1/files-a...y-process-management

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 7 mois #15738 par hahang
Réponse de hahang sur le sujet Re:Procblème boucle robocopy
salut,

Tu peux t'aider du script que j'avais fait pour lancer plusieurs robocopy sur un arborescence afin d'optimiser les temps de copie sur une arborescence complexe :
[code:1]
$userfolders = Get-ChildItem \\server\root_shared_folder | Where-Object {$_.Name -match \&quot;^[a-k]\&quot;}
foreach ($homes in $userfolders) {
if ((Get-Process -Name \&quot;robocopy\&quot;«»).count -le 10) {
[System.Diagnostics.Process]::«»Start( \&quot;robocopy\&quot;, \&quot;\\server\root_shared_folder\$homes Z:\$homes /fp /ndl /sec /mir /mt:32 /r:1 /w:1 /np /X\&quot; )
}
else {
do {sleep 1} while ((Get-Process -Name \&quot;robocopy\&quot;«»).count -ge 10)
[System.Diagnostics.Process]::«»Start( \&quot;robocopy\&quot;, \&quot;\\server\root_shared_folder\$homes Z:\$homes /fp /ndl /sec /mir /mt:32 /r:1 /w:1 /np /X\&quot; )
}
}
[/code:1]

My Powershell IT Script library powershell.nicoh.me/powershell-1/files-a...y-process-management

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 7 mois #15743 par Franck B-A
Réponse de Franck B-A sur le sujet Re:Procblème boucle robocopy
Merci Nicoh, je me penche donc sur ton script afin de l'adapter au mien et je ferai un retour dès que possible ^^

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 7 mois #15744 par Laurent Dardenne
Salut,
un détail en passant, il n'y a pas de gestion du code retour de Robocopy...

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 7 mois #15750 par Franck B-A
Réponse de Franck B-A sur le sujet Re:Problème boucle robocopy
je vais \&quot;essayer\&quot; d' y remédier ^^

Par contre j'ai comme message d' erreur
[code:1]
Get-Process : Impossible de trouver un processus nommé « robocopy ». Vérifiez le nom du processus et appelez de nouveau l'applet de commande.
Au niveau de user_test.ps1 : 69 Caractère : 16
+ if (Get-Process &lt;&lt;&lt;&lt; -Name \&quot;robocopy\&quot;«»)
+ CategoryInfo : ObjectNotFound: (robocopy:«»String) [Get-Process], ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand
[/code:1]

Le robocopy ne se lance pas :/

j'ai dû loupé un truc oO

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.090 secondes
Propulsé par Kunena