Bonjour,
Je suis en train de me battre pour gérer certaines erreurs et notamment celles qui concernent le fait qu'une commande n'est pas connue par une version x de powershell.
Typiquement,
> Cette erreur est correctement détectée par le script :
Pas connu en PS 2.0 et le scirpt sort bien en erreur
$file_list = Get-ChildItem -Path $($src+'\'+$file) -File
Equivalent OK en PS 2.0
$file_list = Get-ChildItem -Path $($src+'\'+$file) | Where { !$_.PSIsContainer }
> En revanche, celle ci n'est pas correctement traitée par le script. Il ne sort pas en erreur et je comprends pas pourquoi.
Pas connu en PS 2.0 et le script ne sort pas en erreur
1 2 3 4 5
| if ( $false -in $success_list )
{ # Vérifier s'il y a eu des erreurs propres au déroulement de la fonction
$count = 0 ; foreach ( $v in $false_list ) { $count ++ }
Write-Host `n'> ERREUR : Erreur(s) de déplacement constatée(s) : ['$count']'
} |
Equivalent OK en PS 2.0
1 2 3 4 5 6
| $false_list = ( $success_list | Where { $_ -eq $false } )
if ( $false_list -ne $null )
{ # Vérifier s'il y a eu des erreurs propres au déroulement de la fonction
$count = 0 ; foreach ( $v in $false_list ) { $count ++ }
Write-Host `n'> ERREUR : Erreur(s) de déplacement constatée(s) : ['$count']'
} |
> Remarque
j'écris :
$count = 0 ; foreach ( $v in $false_list ) { $count ++ }
au lieu de :
$count = $false_list.Count
Car j'ai remarqué qu'en PS 2.0, si la liste est positive avec 0 ou 1 élément, la méthode .Count renvoi $null. "Cela fonctionne" que s'il y a 2 éléments ou plus dans le tableau. Je n'ai pas trouvé de réponse à cela mais je contourne de la sorte.
Néanmoins pour la variable $Error, la méthode .Count a un comportement normal s'il y a 0 ou 1 erreur en PS 2.0. Je ne sais trop quoi en penser vis à vis de ma dernière remarque.
> Pour information le script retourne la variable $CR pour statuer ou non le bon déroulement de celui-ci. Si $CR = 0, exécution du script OK et si $CR > 0, exécution du script NOK.
> Voici le code complet. Concrètement, je cherche à expliquer pourquoi l'erreur 1 est traitée ( $CR > 1 ) et pas l'erreur 2 ( $CR = 0 ).
En vous remerciant par avance pour votre aide.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
| ### VARIABLES ###
$src = $args[0]
$dst = $args[1]
$file = $args[2]
##### Fonctions #####
Function Ctrl-Path ( $path, $commentary )
{
$success = $false
if ((Test-Path -Path $path) -eq $True)
{
Write-Host `n'> Le Répertoire '$commentary' '$path' existe'
$success = $true
}
else
{
Write-Host `n'> Le Répertoire '$commentary' '$path' n''existe pas'
}
return $success
}
Function Get-FileList ( $file )
{
$file_list = $null
if ( ( $file -eq '*' ) -or ( $file -match '`*.' ) )
{
Write-Host `n'> Chemin canonique : '$($src+'\'+$file)
$file_list = Get-ChildItem -Path $($src+'\'+$file) | Where { !$_.PSIsContainer }
}
else { $file_list += $file }
return $file_list
}
Function Move-ItemArchive( $src, $dst )
{
$success = $true
if ( ( $a = Test-Path -Path $($f.FullName) ) -and !( $b = Test-Path $($dst+'\'+$f.Name) ) )
{
Move-item $($f.FullName) -Destination $dst
if ( !( $a = Test-Path -Path $($f.FullName) ) -and ( $b = Test-Path $($dst+'\'+$f.Name) ) )
{ # Le fichier déplacé est présent dans le repertoire de destination et n'est plus présent dans le répertoire source
Write-Host OK
}
else
{ # Erreur lors du déplacement du fichier : Le fichier déplacé n'est pas présent dans le repertoire de destination
$success = $false
if ( $a )
{
Write-Host NOK
Write-Host ' - Erreur : Le fichier est toujours présent dans le répertoire source'
}
if ( !$b )
{
Write-Host NOK
Write-Host ' - Erreur : Le fichier n''estpas présent dans le répertoire destination'
}
}
}
else
{
$success = $false
if ( !$a )
{
Write-Host NOK
Write-Host ' - Erreur : Le fichier source n''existe pas dans le repertoire source'
}
if ( $b )
{
Write-Host NOK
Write-Host ' - Erreur : Le fichier source existe déjà dans le répertoire destination'
}
}
return $success
}
Function archive
{
Write-Host `n'> Début de l''archivage'
$success = $false ; # Variable qui détermine le bon déroulement ou non de la fonction
$success_list = @() ; # Variable qui détermine s'il y a eu une ou plusieurs erreur durant les déplacements de fichers
$file_list = @() ; # Initialisation de la variable qui va contenir la liste des fichiers présents dans le répertoire source
$file_count = 0 ; # Variable qui compte le nombre de fichiers présents dans le répertoire source
if ( ( Ctrl-Path -path $src -commentary "source" ) -and ( Ctrl-Path -path $dst -commentary "destination" ) )
{
$file_list = Get-FileList -file $file
if ( $file_list -ne $null )
{ # On vérifie qu'il y a des fichiers à déplacer
foreach ( $f in $file_list ) { $file_count++ }
Write-Host `n'> ['$file_count'] fichier(s) présent(s) en argument'
$index = 0 ;
foreach ( $f in $file_list )
{ # Début de la boucle de déplacement du ou des fichiers
Write-Host ' > Début de l''archivage du fichier '($index+1)/$file_count' :'
Write-Host ' + Src : ' $($f.FullName)
Write-Host ' + Dst : ' $dst
Write-Host ' + Status : ' -NoNeWLine
$success_list += Move-ItemArchive -src $f -dst $dst
$index += 1
}
}
else
{ # S'il n'y a pas de fichier à déplacer ( pas considéré comme une erreur )
if ( $Error.Count -eq 0 )
{ # On vérifie qu'il n'y a pas eu d'erreur dans logs d'erreurs std pour s'assurer que la cause n'est pas inhérente à une ou plusieurs erreurs powershell préalables mais bien au fait qu'il n'y ait aucun fichier correspondant aux critères
Write-Host `n'> ATTENTION : Aucun fichier répondant au(x) critère(s)"' $file '" n''est présent dans le répertoire source'
}
# Sinon on continue l'execution du script jusqu'au controle de la log d'erreur std
}
}
else { $success_list += $false }
$false_list = ( $success_list | Where { $_ -eq $false } )
if ( $false -in $success_list ) #$false_list -ne $null
{ # Vérifier s'il y a eu des erreurs propres au déroulement de la fonction
$count = 0 ; foreach ( $v in $false_list ) { $count ++ }
Write-Host `n'> ERREUR : Erreur(s) de déplacement constatées : ['$count']'
}
else
{
Write-Host `n'> Aucune erreur de déplacement n''a été constatée'
$success = $true
}
Write-Host `n'> Fin de l''archivage'
return $success
}
Function Main-Function
{
$r = @(1,1)
if ( ($success = archive) ) { $r[0] = 0 }
if ( $Error.Count -ne 0 )
{ # Liste des erreurs inhérentes à powershell
Write-Host `n'> ERREUR : Liste des erreurs survenues lors de l''éxecution de la fonction : ( Voir la log d''erreur pour plus de détails )'
foreach ( $err in $Error ) { Write-Host '+ '$err }
}
else { $r[1] = 0 }
return $( $r[0] + $r[1] )
}
##### Main #####
$CR = 1
$Error.Clear | Out-Null
$CR = Main-Function
Exit $CR
###FIN### |
Partager