Author Posts

March 24, 2017 at 9:32 am

Bonjour,
Sur un serveur 2012R2 Std 64 bits je veux automatiser avec PowerShell une copie de fichiers.
Je créé un script copie.ps1 contenant :

$Source  = "L:\Hyper-V\Disques virtuels"
$Copie   = "Z:\Hyper-V\Disques virtuels"
$Fic = "HD1_FICHIERS.vhdx"
$VM_Nom = "FICHIERS"
$Options = "/COPYALL /E /V /R:8 /W:15 /XA:SH"
$FicLog  = "$env:HOMEPATH\Documents\RBC_Fichiers.log"
RoboCopy $Source $Copie $Fic $Options

Et j'obtiens le message d'erreur :

-------------------------------------------------------------------------------
   ROBOCOPY   ::   Copie de fichiers robuste pour Windows     
-------------------------------------------------------------------------------
  Début : vendredi 24 mars 2017 09:54:35
  Source - L:\Hyper-V\Disques virtuels\
  Dest - Z:\Hyper-V\Disques virtuels\
  Fichiers : HD1_FICHIER.vhdx
     
  Options : /DCOPY:DA /COPY:DAT /R:1000000 /W:30 
-------------------------------------------------------------------------------
ERREUR : paramètre non valide #4 : "/COPYALL /E /V /R:8 /W:15 /XA:SH"

Or si je tape la commande sans utiliser les variables (ce que je veux obtenir) :

RoboCopy L:\Hyper-V\"Disques virtuels" Z:\Hyper-V\"Disques virtuels" HD1_FICHIER.vhdx /COPYALL /E /V /R:8 /W:15 /XA:SH

La copie s'effectue sans erreur !
Je n'arrive pas à comprendre la raison de cet échec avec les variables, j'ai tenté plusieurs variantes de syntaxe ...
Pourrait-on m'expliquer mon erreur ?
Cordialement.

Luc

March 24, 2017 at 9:56 am

$Options is treated as a single option. To have it treated as several options, use an array as in:

$Source  = "L:\Hyper-V\Disques virtuels"
$Copie   = "Z:\Hyper-V\Disques virtuels"
$Fic = "HD1_FICHIERS.vhdx"
$VM_Nom = "FICHIERS"
$Options = @('/COPYALL','/E','/V','/R:8','/W:15','/XA:SH')
$FicLog  = "$env:HOMEPATH\Documents\RBC_Fichiers.log"
RoboCopy $Source $Copie $Fic $Options

March 24, 2017 at 10:05 am

hi,
switching to English 🙂
You need to play the parameters in a specific way to make it works.
Try this out:

[string]$Robocopy = "Robocopy.exe"
 $FicLog = "$env:HOMEPATH\Documents\RBC_Fichiers.log"
 $RobocopyParams = @("/COPYALL","/E","/V","/R:8","/W:15","/XA:SH",("/LOG+:" +  $FicLog))
 $paths =  @("L:\Hyper-V\Disques virtuels", "Z:\Hyper-V\Disques virtuels","HD1_FICHIERS.vhdx")

 $parameters = $paths + $RobocopyParams
  
 &$robocopy $parameters

ciao
fra

March 24, 2017 at 1:53 pm

Oups ! Sorry for French speaking.
Ok your answers works fine.
Many thanks.
Bests regards