Question
RESOLU :Problème boucle robocopy
- Franck B-A
- Auteur du sujet
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 28
- Remerciements reçus 0
il y a 10 ans 7 mois #15735
par Franck B-A
RESOLU :Problème boucle robocopy a été créé 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é ), 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
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é ), 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.
- hahang
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
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 \"^[a-k]\"}
foreach ($homes in $userfolders) {
if ((Get-Process -Name \"robocopy\"«»).count -le 10) {
[System.Diagnostics.Process]::«»Start( \"robocopy\", \"\\server\root_shared_folder\$homes Z:\$homes /fp /ndl /sec /mir /mt:32 /r:1 /w:1 /np /X\" )
}
else {
do {sleep 1} while ((Get-Process -Name \"robocopy\"«»).count -ge 10)
[System.Diagnostics.Process]::«»Start( \"robocopy\", \"\\server\root_shared_folder\$homes Z:\$homes /fp /ndl /sec /mir /mt:32 /r:1 /w:1 /np /X\" )
}
}
[/code:1]
My Powershell IT Script library powershell.nicoh.me/powershell-1/files-a...y-process-management
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 \"^[a-k]\"}
foreach ($homes in $userfolders) {
if ((Get-Process -Name \"robocopy\"«»).count -le 10) {
[System.Diagnostics.Process]::«»Start( \"robocopy\", \"\\server\root_shared_folder\$homes Z:\$homes /fp /ndl /sec /mir /mt:32 /r:1 /w:1 /np /X\" )
}
else {
do {sleep 1} while ((Get-Process -Name \"robocopy\"«»).count -ge 10)
[System.Diagnostics.Process]::«»Start( \"robocopy\", \"\\server\root_shared_folder\$homes Z:\$homes /fp /ndl /sec /mir /mt:32 /r:1 /w:1 /np /X\" )
}
}
[/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.
- hahang
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
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 \"^[a-k]\"}
foreach ($homes in $userfolders) {
if ((Get-Process -Name \"robocopy\"«»).count -le 10) {
[System.Diagnostics.Process]::«»Start( \"robocopy\", \"\\server\root_shared_folder\$homes Z:\$homes /fp /ndl /sec /mir /mt:32 /r:1 /w:1 /np /X\" )
}
else {
do {sleep 1} while ((Get-Process -Name \"robocopy\"«»).count -ge 10)
[System.Diagnostics.Process]::«»Start( \"robocopy\", \"\\server\root_shared_folder\$homes Z:\$homes /fp /ndl /sec /mir /mt:32 /r:1 /w:1 /np /X\" )
}
}
[/code:1]
My Powershell IT Script library powershell.nicoh.me/powershell-1/files-a...y-process-management
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 \"^[a-k]\"}
foreach ($homes in $userfolders) {
if ((Get-Process -Name \"robocopy\"«»).count -le 10) {
[System.Diagnostics.Process]::«»Start( \"robocopy\", \"\\server\root_shared_folder\$homes Z:\$homes /fp /ndl /sec /mir /mt:32 /r:1 /w:1 /np /X\" )
}
else {
do {sleep 1} while ((Get-Process -Name \"robocopy\"«»).count -ge 10)
[System.Diagnostics.Process]::«»Start( \"robocopy\", \"\\server\root_shared_folder\$homes Z:\$homes /fp /ndl /sec /mir /mt:32 /r:1 /w:1 /np /X\" )
}
}
[/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.
- Franck B-A
- Auteur du sujet
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 28
- Remerciements reçus 0
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 10 ans 7 mois #15744
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Procblème boucle robocopy
Salut,
un détail en passant, il n'y a pas de gestion du code retour de Robocopy...
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.
- Franck B-A
- Auteur du sujet
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 28
- Remerciements reçus 0
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 \"essayer\" 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 <<<< -Name \"robocopy\"«»)
+ 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
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 <<<< -Name \"robocopy\"«»)
+ 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
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- RESOLU :Problème boucle robocopy