Question
verifie une copie
- pa94
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 15 ans 2 mois #9071
par pa94
verifie une copie a été créé par pa94
Bonjour,
Je suis novice sur powershell et voila ce que j'ai fait:
créer un simple script qui copie tel dossier,ficher vers tel dossier et qui vérifie qu'ils sont bien copiés.
voila mon script:
[code:1]$a=\"d:\documents\S605673\Mes Documents\Musique\"
$b=\"D:\sauvegarde\"
$c=\"D:\sauvegarde\Musique\"
cd $a
$nb1= get-childitem -recurse | measure-object | select count
#echo \" affiche nombre de fichiers et dossiers dans le répertoire actif\"
#echo $nb1
#Test-Path $c #Détermine si tous les éléments d'un chemin d'accès existent
if (!(Test-Path $c)) #test d'existence du dossier (execute la copie si faux)
{
echo \"debut copie de fichier\"
copy-item $a -destination $b -recurse
echo \"fin copie de fichier\"
}
else #sinon le dossier existe
{
echo ”le dossier existe”
}
cd $c
$nb2= get-childitem -recurse | measure-object | select count
Get-Variable nb1 , nb2
$nb1
$nb2
$nb1 -eq $nb2
if ( $nb1 -eq $nb2 ) #si $nb1 = $nb2
{
echo \"source bien copié dans destination\"
}
else
{
echo \"copie erreur dans le nombre\"
}
[/code:1]
Mais voila arrivé a la commande \"$nb1 -eq $nb2\" ,il me retourne la valeur false alors que les 2 variables sont identiques quand je les affiche donc il m'affiche copie erreur dans le nombre alors que mes fichiers sont bien copiés.
voici ce que ca m'affiche à l'ecran :
Uploaded with ImageShack.us
si quelqu'un peut m'aider
Merci d'avance<br><br>Message édité par: pa94, à: 4/03/11 11:46
Je suis novice sur powershell et voila ce que j'ai fait:
créer un simple script qui copie tel dossier,ficher vers tel dossier et qui vérifie qu'ils sont bien copiés.
voila mon script:
[code:1]$a=\"d:\documents\S605673\Mes Documents\Musique\"
$b=\"D:\sauvegarde\"
$c=\"D:\sauvegarde\Musique\"
cd $a
$nb1= get-childitem -recurse | measure-object | select count
#echo \" affiche nombre de fichiers et dossiers dans le répertoire actif\"
#echo $nb1
#Test-Path $c #Détermine si tous les éléments d'un chemin d'accès existent
if (!(Test-Path $c)) #test d'existence du dossier (execute la copie si faux)
{
echo \"debut copie de fichier\"
copy-item $a -destination $b -recurse
echo \"fin copie de fichier\"
}
else #sinon le dossier existe
{
echo ”le dossier existe”
}
cd $c
$nb2= get-childitem -recurse | measure-object | select count
Get-Variable nb1 , nb2
$nb1
$nb2
$nb1 -eq $nb2
if ( $nb1 -eq $nb2 ) #si $nb1 = $nb2
{
echo \"source bien copié dans destination\"
}
else
{
echo \"copie erreur dans le nombre\"
}
[/code:1]
Mais voila arrivé a la commande \"$nb1 -eq $nb2\" ,il me retourne la valeur false alors que les 2 variables sont identiques quand je les affiche donc il m'affiche copie erreur dans le nombre alors que mes fichiers sont bien copiés.
voici ce que ca m'affiche à l'ecran :
Uploaded with ImageShack.us
si quelqu'un peut m'aider
Merci d'avance<br><br>Message édité par: pa94, à: 4/03/11 11:46
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 15 ans 2 mois #9073
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:verifie une copie
Bonjour,
Je pense avoir trouvé ton problème, quand tu fais cette commande pour récupérer le nombre d'élément :
[code:1]get-childitem -recurse | measure-object | select count[/code:1]
L'objet récupéré est un objet de type [System.Object.PSCustomObject] avec un attribut Count et non un [System.ValueType.Int32] or l'opérateur de comparaison ne comprend pas quand tu lui passes des valeur de type [System.Object.PSCustomObject].
Tu as donc deux solutions
Soit tu remplaces :
[code:1]get-childitem -recurse | measure-object | select count[/code:1]
par :
[code:1](get-childitem -recurse | measure-object).Count[/code:1]
Dans ce cas tu auras des valeurs de type Int32 dans tes variables.
Soit tu effectues ta comparaison sur l'attribut Count de ton PSCustomObject et donc tu remplaces :
[code:1]
if ( $nb1 -eq $nb2 ) #si $nb1 = $nb2
{
echo \"source bien copié dans destination\"
}
else
{
echo \"copie erreur dans le nombre\"
}
[/code:1]
par :
[code:1]
if ( $nb1.Count -eq $nb2.Count )
{
echo \"source bien copié dans destination\"
}
else
{
echo \"copie erreur dans le nombre\"
}
[/code:1]
J'espère que tu as compris mes explications.
Bien Cordialement,
Richard Lazaro.
Je pense avoir trouvé ton problème, quand tu fais cette commande pour récupérer le nombre d'élément :
[code:1]get-childitem -recurse | measure-object | select count[/code:1]
L'objet récupéré est un objet de type [System.Object.PSCustomObject] avec un attribut Count et non un [System.ValueType.Int32] or l'opérateur de comparaison ne comprend pas quand tu lui passes des valeur de type [System.Object.PSCustomObject].
Tu as donc deux solutions
Soit tu remplaces :
[code:1]get-childitem -recurse | measure-object | select count[/code:1]
par :
[code:1](get-childitem -recurse | measure-object).Count[/code:1]
Dans ce cas tu auras des valeurs de type Int32 dans tes variables.
Soit tu effectues ta comparaison sur l'attribut Count de ton PSCustomObject et donc tu remplaces :
[code:1]
if ( $nb1 -eq $nb2 ) #si $nb1 = $nb2
{
echo \"source bien copié dans destination\"
}
else
{
echo \"copie erreur dans le nombre\"
}
[/code:1]
par :
[code:1]
if ( $nb1.Count -eq $nb2.Count )
{
echo \"source bien copié dans destination\"
}
else
{
echo \"copie erreur dans le nombre\"
}
[/code:1]
J'espère que tu as compris mes explications.
Bien Cordialement,
Richard Lazaro.
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- pa94
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 15 ans 2 mois #9074
par pa94
Réponse de pa94 sur le sujet Re:verifie une copie
Super ! c'était ca mon problème ! je ne savais pas comment juste récupérer la valeur numérique de ma variable .
un grand merci pour ton aide Richard Lazaro .
Bon Weekend !!!
un grand merci pour ton aide Richard Lazaro .
Bon Weekend !!!
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 15 ans 2 mois #9078
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:verifie une copie
Salut,
je me permet une remarque :
Richard Lazaro écrit:
[code:1]
#On crée une variable de type PSCustomObject, cf. Select-Object
$nb1= get-childitem -recurse | measure-object | select count
#On manipule des variables contenant des références, c'est à dire des adresses mémoires
$v1=[ref]$nb1
$v2=[ref]$nb1
#On teste deux variables leur adresse est donc distincte
#Peut importe leur contenu, le test sera tjr faux
$v1 -eq $v2
#False
#On teste $null, car $Vx.Count n'existe pas
$v1.count -eq $v2.Count
#True
$v1.count -eq $null
#True
#On teste deux adresses pointant sur le même objet
#Une référence, [Ref], contient un champ value
$v1.value -eq $v2.value
#True
#On teste deux valeurs pointant sur le même objet
$v1.value.Count -eq $v2.value.Count
#True
#On affiche deux objets
$v1.value;$v2.value
# Count
#
# 41
# 41
#On affiche deux fois la propriété d'un object
$v1.value.Count;$v2.value.Count
#41
#41
#On modifie l'objet initial
$nb1.Count=-256
#...
$v1.value;$v2.value
# Count
#
# -256
# -256
$v1.value.Count;$v2.value.Count
#-256
#-256
#On test deux variables de type valeur
$I1=10
$I2=10
$I1 -eq $I2
#True
#On vérifie si le type est une type valeur ou un type référence
$Nb1.GetType().IsValueType
#False, car de type référence
$I1.GetType().IsValueType
#True, car de type valeur
[/code:1]
Ta formulation est exacte si, à mon avis, on fait l'impasse sur ce principe de base de dotnet.
je me permet une remarque :
Richard Lazaro écrit:
L'opérateur de comparaison comprend très bien les opérandes $Nb1 et $Nb2,le pb est qu'ici on vérifie l'adresse des objets, dans ce cas des variables PowerShell qui sont donc de type référence, et pas le contenu du champ Count qui est ici de type valeur .or l'opérateur de comparaison ne comprend pas quand tu lui passes des valeurs de type [System.Object.PSCustomObject].
[code:1]
#On crée une variable de type PSCustomObject, cf. Select-Object
$nb1= get-childitem -recurse | measure-object | select count
#On manipule des variables contenant des références, c'est à dire des adresses mémoires
$v1=[ref]$nb1
$v2=[ref]$nb1
#On teste deux variables leur adresse est donc distincte
#Peut importe leur contenu, le test sera tjr faux
$v1 -eq $v2
#False
#On teste $null, car $Vx.Count n'existe pas
$v1.count -eq $v2.Count
#True
$v1.count -eq $null
#True
#On teste deux adresses pointant sur le même objet
#Une référence, [Ref], contient un champ value
$v1.value -eq $v2.value
#True
#On teste deux valeurs pointant sur le même objet
$v1.value.Count -eq $v2.value.Count
#True
#On affiche deux objets
$v1.value;$v2.value
# Count
#
# 41
# 41
#On affiche deux fois la propriété d'un object
$v1.value.Count;$v2.value.Count
#41
#41
#On modifie l'objet initial
$nb1.Count=-256
#...
$v1.value;$v2.value
# Count
#
# -256
# -256
$v1.value.Count;$v2.value.Count
#-256
#-256
#On test deux variables de type valeur
$I1=10
$I2=10
$I1 -eq $I2
#True
#On vérifie si le type est une type valeur ou un type référence
$Nb1.GetType().IsValueType
#False, car de type référence
$I1.GetType().IsValueType
#True, car de type valeur
[/code:1]
Ta formulation est exacte si, à mon avis, on fait l'impasse sur ce principe de base de dotnet.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.042 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- verifie une copie