Question
Besoin d'aide logique
- Jean Ben
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 12
- Remerciements reçus 0
il y a 14 ans 11 heures #11351
par Jean Ben
Besoin d'aide logique a été créé par Jean Ben
Bonjour,
Voici mon problème :
J'ai un fichier rapport.csv de ce type :
NomVM,1,2,3,4,5,6,7,8,9,10
VM1,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM2,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
[code:1]$csv = Import-csv -Path D:\rapport.csv[/code:1]
Je souhaite tester la présence d'une liste de VM dans le fichier rapport.csv. Si la VM n'est pas présente dans le rapport.csv, alors je lance une action (peu importe l'action c'est pas le sujet)
Manuellement, pour tester j'utilise ces commandes :
$csv[0].NomVM -contains \"VM3\"
$csv[1].NomVM -contains \"VM3\"
$csv[2].NomVM -contains \"VM3\"
Je dois donc parcourir tous les index.
[code:1]foreach ($VM in $ListeVMS)
{
for ($i = 0; $i++)
if ($CSV[$i].NomVM -eq $VM)
{
Action
}
}[/code:1]
Cela n'est pas bon
Pouvez vous me donner une piste ?
Voici mon problème :
J'ai un fichier rapport.csv de ce type :
NomVM,1,2,3,4,5,6,7,8,9,10
VM1,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM2,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
[code:1]$csv = Import-csv -Path D:\rapport.csv[/code:1]
Je souhaite tester la présence d'une liste de VM dans le fichier rapport.csv. Si la VM n'est pas présente dans le rapport.csv, alors je lance une action (peu importe l'action c'est pas le sujet)
Manuellement, pour tester j'utilise ces commandes :
$csv[0].NomVM -contains \"VM3\"
$csv[1].NomVM -contains \"VM3\"
$csv[2].NomVM -contains \"VM3\"
Je dois donc parcourir tous les index.
[code:1]foreach ($VM in $ListeVMS)
{
for ($i = 0; $i++)
if ($CSV[$i].NomVM -eq $VM)
{
Action
}
}[/code:1]
Cela n'est pas bon
Connexion ou Créer un compte pour participer à la conversation.
- BENOIT Damien
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 10
- Remerciements reçus 0
il y a 14 ans 9 heures #11352
par BENOIT Damien
Réponse de BENOIT Damien sur le sujet Re:Besoin d'aide logique
<br><br>Message édité par: Damien BENOIT, à: 20/03/12 20:57
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 5 heures #11354
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Besoin d'aide logique
Salut,
une solution en utilsant des objets et le cmdlet Compare-object :
[code:1]
$FullName=\"c:\temp\NomVM.txt\"
@\"
NomVM,1,2,3,4,5,6,7,8,9,10
VM1,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM2,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM3,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM4,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM5,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
\"@ > $FullName
$MyVms = Import-csv -Path $FullName
function New-VMInfo {
param ($Name)
New-Object PSObject -Property @{NomVM=$Name}
}
$Recherche=@(
New-VMInfo \"VM2\"
New-VMInfo \"VM5\"
New-VMInfo \"VM6\"
)
$Max=[Math]::Max($MyVMs.count,$Recherche.count)
Compare-Object $Recherche $MyVms -sync $Max -IncludeEqual -Property NomVM
# NomVM SideIndicator
#
# VM2 ==
# VM5 ==
# VM1 =>
# VM3 =>
# VM4 =>
# VM6 <=
Get-help Compare-Object -full
[/code:1]
Tu peux aussi rechercher l'occurence Compare-Object sur le forum, il y a qq posts plus explicite.
Avec ton code de départ :
[code:1]
foreach ($VM in $Recherche)
{
Write-Host \"recherche : ($vm.NomVM)\"
for ($i = 0; $i -lt $myvms.count; $i++)
{
Write-Host \"current : $($myvms[$i].NomVM)\"
if ($myvms[$i].NomVM -eq $VM.NomVM)
{
write-Warning \"Action $VM !\"
}
}
}
[/code:1]
une solution en utilsant des objets et le cmdlet Compare-object :
[code:1]
$FullName=\"c:\temp\NomVM.txt\"
@\"
NomVM,1,2,3,4,5,6,7,8,9,10
VM1,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM2,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM3,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM4,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM5,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
\"@ > $FullName
$MyVms = Import-csv -Path $FullName
function New-VMInfo {
param ($Name)
New-Object PSObject -Property @{NomVM=$Name}
}
$Recherche=@(
New-VMInfo \"VM2\"
New-VMInfo \"VM5\"
New-VMInfo \"VM6\"
)
$Max=[Math]::Max($MyVMs.count,$Recherche.count)
Compare-Object $Recherche $MyVms -sync $Max -IncludeEqual -Property NomVM
# NomVM SideIndicator
#
# VM2 ==
# VM5 ==
# VM1 =>
# VM3 =>
# VM4 =>
# VM6 <=
Get-help Compare-Object -full
[/code:1]
Tu peux aussi rechercher l'occurence Compare-Object sur le forum, il y a qq posts plus explicite.
Avec ton code de départ :
[code:1]
foreach ($VM in $Recherche)
{
Write-Host \"recherche : ($vm.NomVM)\"
for ($i = 0; $i -lt $myvms.count; $i++)
{
Write-Host \"current : $($myvms[$i].NomVM)\"
if ($myvms[$i].NomVM -eq $VM.NomVM)
{
write-Warning \"Action $VM !\"
}
}
}
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Jean Ben
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 12
- Remerciements reçus 0
il y a 13 ans 11 mois #11360
par Jean Ben
Réponse de Jean Ben sur le sujet Re:Besoin d'aide logique
Ok, merci je vais étudier cela
Connexion ou Créer un compte pour participer à la conversation.
- sebastien
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 32
- Remerciements reçus 0
il y a 13 ans 11 mois #11365
par sebastien
Réponse de sebastien sur le sujet Re:Besoin d'aide logique
Bonjour,
Ceci devrait fonctionner.
[code:1]$list_vm_a_tester = @(\"VM1\",\"VM2\",\"VM3\",\"VM4\",\"VM5\",\"VM6\",\"VM7\",\"VM8\",\"VM10\",\"VM11\"«»)
$list_vm_du_rapport = \"\"
$rapport_csv=\"c:\temp\NomVM.csv\"
@\"
NomVM,1,2,3,4,5,6,7,8,9,10
VM1,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM2,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM3,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM4,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM5,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM10,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
\"@ > $rapport_csv
# création d'une liste des VM du rapport au format string ex; VM1,VM2, ...
Get-Content $rapport_csv | % {If (-not($_.Split(',')[0] -eq \"NomVM\"«»)) {$list_vm_du_rapport += $_.Split(',')[0]+\",\"}}
ForEach ($vm in $list_vm_a_tester){
If (-not($list_vm_du_rapport -like \"*$vm,*\"«»))
{
echo $vm
#Tes actions
}
}[/code:1]
Seb++<br><br>Message édité par: sebasti1, à: 22/03/12 11:23
Ceci devrait fonctionner.
[code:1]$list_vm_a_tester = @(\"VM1\",\"VM2\",\"VM3\",\"VM4\",\"VM5\",\"VM6\",\"VM7\",\"VM8\",\"VM10\",\"VM11\"«»)
$list_vm_du_rapport = \"\"
$rapport_csv=\"c:\temp\NomVM.csv\"
@\"
NomVM,1,2,3,4,5,6,7,8,9,10
VM1,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM2,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM3,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM4,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM5,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
VM10,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
\"@ > $rapport_csv
# création d'une liste des VM du rapport au format string ex; VM1,VM2, ...
Get-Content $rapport_csv | % {If (-not($_.Split(',')[0] -eq \"NomVM\"«»)) {$list_vm_du_rapport += $_.Split(',')[0]+\",\"}}
ForEach ($vm in $list_vm_a_tester){
If (-not($list_vm_du_rapport -like \"*$vm,*\"«»))
{
echo $vm
#Tes actions
}
}[/code:1]
Seb++<br><br>Message édité par: sebasti1, à: 22/03/12 11:23
Connexion ou Créer un compte pour participer à la conversation.
- Jean Ben
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 12
- Remerciements reçus 0
il y a 13 ans 11 mois #11409
par Jean Ben
Réponse de Jean Ben sur le sujet Re:Besoin d'aide logique
ça marche !
Merci beaucoup
Merci beaucoup
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.093 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Besoin d'aide logique