Question
Ne pas afficher les erreurs
- PASCAULT
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 17 ans 5 mois #2926
par PASCAULT
Réponse de PASCAULT sur le sujet Re:Ne pas afficher les erreurs
Bonjour à tous,
Pour compléter un peu la discution, le test du ping est bien mais tu pourrais très bien avoir un problème d'un poste qui ne soit pas Microsoft (même si là, dans ton cas, ton fichier ordi doit être déjà épuré); Mais tu pourrais avoir un pb de droit ou encore de port ip bloqué.
Tu peux ajouter un test éventuel pour savoir si la machine répond aux requêtes wmi :
[code:1]function PingWmi-Poste {
Param([string]$server)
$pingresult = Get-WmiObject win32_pingstatus -f \"address='$Server'\"
if($pingresult.statuscode -eq 0) {$true} else {$false}
}[/code:1]
Tu pourrais même éventuellement te passer du test ping.exe, mais le timeout est un peu plus long via wmi.
Pour ton problème de tableaux, en fait, pourquoi écrire tes postes allumés dans un fichier ?
tu peux même passer par une variable.
Mais même, sans aller trop loin dans la manipulation des objets, si tu débutes en PS, tu pourrais déjà tout simplement inclure ta partie get-wmi dans ton test if
[code:1] param ($procname = \".\"«»)
get-content ordi.txt|foreach{Ping.exe $_ -n 1 > $null
if ($LASTEXITCODE -eq 0)
{
write host \"--->ping OK\"
get-wmiobject win32_process -computername $_ |where{$_.processname -eq $procname}|select processname,csname
}
else
{
write host \"--->ping KO\"}
}[/code:1]
ou sinon, si tu veux garder l'architecture de ton script, mettre les postes allumés dans une variable
[code:1]
$ordi_allum=(get-content ordi.txt|foreach{Ping.exe $_ -n 1 > $null
if ($LASTEXITCODE -eq 0)
{
Write-Output $_
}
}
)
$ordi_allum|foreach{write-host \"traitement du poste $_\"}[/code:1]
Voilà, je te laisse découvrir tout ça, mais on peut encore faire mieux...
Pour compléter un peu la discution, le test du ping est bien mais tu pourrais très bien avoir un problème d'un poste qui ne soit pas Microsoft (même si là, dans ton cas, ton fichier ordi doit être déjà épuré); Mais tu pourrais avoir un pb de droit ou encore de port ip bloqué.
Tu peux ajouter un test éventuel pour savoir si la machine répond aux requêtes wmi :
[code:1]function PingWmi-Poste {
Param([string]$server)
$pingresult = Get-WmiObject win32_pingstatus -f \"address='$Server'\"
if($pingresult.statuscode -eq 0) {$true} else {$false}
}[/code:1]
Tu pourrais même éventuellement te passer du test ping.exe, mais le timeout est un peu plus long via wmi.
Pour ton problème de tableaux, en fait, pourquoi écrire tes postes allumés dans un fichier ?
tu peux même passer par une variable.
Mais même, sans aller trop loin dans la manipulation des objets, si tu débutes en PS, tu pourrais déjà tout simplement inclure ta partie get-wmi dans ton test if
[code:1] param ($procname = \".\"«»)
get-content ordi.txt|foreach{Ping.exe $_ -n 1 > $null
if ($LASTEXITCODE -eq 0)
{
write host \"--->ping OK\"
get-wmiobject win32_process -computername $_ |where{$_.processname -eq $procname}|select processname,csname
}
else
{
write host \"--->ping KO\"}
}[/code:1]
ou sinon, si tu veux garder l'architecture de ton script, mettre les postes allumés dans une variable
[code:1]
$ordi_allum=(get-content ordi.txt|foreach{Ping.exe $_ -n 1 > $null
if ($LASTEXITCODE -eq 0)
{
Write-Output $_
}
}
)
$ordi_allum|foreach{write-host \"traitement du poste $_\"}[/code:1]
Voilà, je te laisse découvrir tout ça, mais on peut encore faire mieux...
Connexion ou Créer un compte pour participer à la conversation.
- PASCAULT
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 17 ans 5 mois #2927
par PASCAULT
Réponse de PASCAULT sur le sujet Re:Ne pas afficher les erreurs
Bonjour à tous,
Pour compléter un peu la discution, le test du ping est bien mais tu pourrais très bien avoir un problème d'un poste qui ne soit pas Microsoft (même si là, dans ton cas, ton fichier ordi doit être déjà épuré); Mais tu pourrais avoir un pb de droit ou encore de port ip bloqué.
Tu peux ajouter un test éventuel pour savoir si la machine répond aux requêtes wmi :
[code:1]function PingWmi-Poste {
Param([string]$server)
$pingresult = Get-WmiObject win32_pingstatus -f \"address='$Server'\"
if($pingresult.statuscode -eq 0) {$true} else {$false}
}[/code:1]
Tu pourrais même éventuellement te passer du test ping.exe, mais le timeout est un peu plus long via wmi.
Pour ton problème de tableaux, en fait, pourquoi écrire tes postes allumés dans un fichier ?
tu peux même passer par une variable.
Mais même, sans aller trop loin dans la manipulation des objets, si tu débutes en PS, tu pourrais déjà tout simplement inclure ta partie get-wmi dans ton test if
[code:1] param ($procname = \".\"«»)
get-content ordi.txt|foreach{Ping.exe $_ -n 1 > $null
if ($LASTEXITCODE -eq 0)
{
write host \"--->ping OK\"
get-wmiobject win32_process -computername $_ |where{$_.processname -eq $procname}|select processname,csname
}
else
{
write host \"--->ping KO\"}
}[/code:1]
ou sinon, si tu veux garder l'architecture de ton script, mettre les postes allumés dans une variable
[code:1]
$ordi_allum=(get-content ordi.txt|foreach{Ping.exe $_ -n 1 > $null
if ($LASTEXITCODE -eq 0)
{
Write-Output $_
}
}
)
$ordi_allum|foreach{write-host \"traitement du poste $_\"}[/code:1]
Voilà, je te laisse découvrir tout ça, mais on peut encore faire mieux...
Pour compléter un peu la discution, le test du ping est bien mais tu pourrais très bien avoir un problème d'un poste qui ne soit pas Microsoft (même si là, dans ton cas, ton fichier ordi doit être déjà épuré); Mais tu pourrais avoir un pb de droit ou encore de port ip bloqué.
Tu peux ajouter un test éventuel pour savoir si la machine répond aux requêtes wmi :
[code:1]function PingWmi-Poste {
Param([string]$server)
$pingresult = Get-WmiObject win32_pingstatus -f \"address='$Server'\"
if($pingresult.statuscode -eq 0) {$true} else {$false}
}[/code:1]
Tu pourrais même éventuellement te passer du test ping.exe, mais le timeout est un peu plus long via wmi.
Pour ton problème de tableaux, en fait, pourquoi écrire tes postes allumés dans un fichier ?
tu peux même passer par une variable.
Mais même, sans aller trop loin dans la manipulation des objets, si tu débutes en PS, tu pourrais déjà tout simplement inclure ta partie get-wmi dans ton test if
[code:1] param ($procname = \".\"«»)
get-content ordi.txt|foreach{Ping.exe $_ -n 1 > $null
if ($LASTEXITCODE -eq 0)
{
write host \"--->ping OK\"
get-wmiobject win32_process -computername $_ |where{$_.processname -eq $procname}|select processname,csname
}
else
{
write host \"--->ping KO\"}
}[/code:1]
ou sinon, si tu veux garder l'architecture de ton script, mettre les postes allumés dans une variable
[code:1]
$ordi_allum=(get-content ordi.txt|foreach{Ping.exe $_ -n 1 > $null
if ($LASTEXITCODE -eq 0)
{
Write-Output $_
}
}
)
$ordi_allum|foreach{write-host \"traitement du poste $_\"}[/code:1]
Voilà, je te laisse découvrir tout ça, mais on peut encore faire mieux...
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 17 ans 5 mois #2928
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Ne pas afficher les erreurs
Nostra écrit:
[code:1]
filter IsAlive{
Ping.exe $_ -n 1 > $null
if ($LASTEXITCODE -eq 0)
{ $_ }
}
get-content ordi-allum.txt|IsAlive |foreach {get-wmiobject win32_process -co $_ -f \"Name='$procname'\"}|select processname,csname
[/code:1]
Et autant laisser WMI filtrer les données ce qui en fait moins à traiter sous PS.
Nostra écrit:
[code:1]
$PC=get-content ordi-allum.txt|IsAlive
[/code:1]
sauf s'il renvoi un seul élément dans ce cas il renvoi un objet on doit donc forcer la création en un tableau par la syntaxe suivante :
[code:1]
$PC=@( get-content ordi-allum.txt|IsAlive)
[/code:1]
Sinon cet approche laisse un petit soucis pour une machine en phase de reboot ou d'arrêt car elle peut répondre au ping mais peut être pas à WMI ou pire une coupure réseau. Bon ce n'est pas courant mais possible.
De plus mieux vaut pinger la machine puis tout de suite après requêter WMI.
[edit]
J'ai posté en même temp que gremlinsy ...<br><br>Message édité par: Laurent Dardenne, à: 10/10/08 13:12
Disons qu'on peut s'en passer en utilisant un filtre :bon passer par un fichier c'est vraiment pas propre
[code:1]
filter IsAlive{
Ping.exe $_ -n 1 > $null
if ($LASTEXITCODE -eq 0)
{ $_ }
}
get-content ordi-allum.txt|IsAlive |foreach {get-wmiobject win32_process -co $_ -f \"Name='$procname'\"}|select processname,csname
[/code:1]
Et autant laisser WMI filtrer les données ce qui en fait moins à traiter sous PS.
Nostra écrit:
Oui par défaut le pipeleine crée un tableauje pense qu'on peut mettre ça dans un tableau
[code:1]
$PC=get-content ordi-allum.txt|IsAlive
[/code:1]
sauf s'il renvoi un seul élément dans ce cas il renvoi un objet on doit donc forcer la création en un tableau par la syntaxe suivante :
[code:1]
$PC=@( get-content ordi-allum.txt|IsAlive)
[/code:1]
Sinon cet approche laisse un petit soucis pour une machine en phase de reboot ou d'arrêt car elle peut répondre au ping mais peut être pas à WMI ou pire une coupure réseau. Bon ce n'est pas courant mais possible.
De plus mieux vaut pinger la machine puis tout de suite après requêter WMI.
[edit]
J'ai posté en même temp que gremlinsy ...<br><br>Message édité par: Laurent Dardenne, à: 10/10/08 13:12
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Grégory
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 49
- Remerciements reçus 0
il y a 17 ans 5 mois #2932
par Grégory
Réponse de Grégory sur le sujet Re:Ne pas afficher les erreurs
Ok merci à vous
Je vais vous expliquer un peu le but du script
On doit effectuer une sauvegarde de la base de notre ERP
il y a 2 sites, un finit à 13h00 et l'autre commence à 13h00 ...
on a donc réservé la plage horaire de 12h45 et 13h00 pour effectuer la sauvegarde
le problème c'est qu'il y a toujours des gens qui restent connectés (malgré les notes de service et nombreux rappels ...)
donc d'habitude on les shoote un par un (des fois le temps de les shooter et de lancer la sauvegarde ils se reconnectent
)
bref c'est chiant (et on est feignant
)
le but du script :
voir sur quelles machines l'erp est lancé, puis les shooter et lancer la sauvegarde
sur mon dernier jet,je détecte les machines allumées et je shoote bien le processus
mon problème est que j'ai de nouveau une erreur vu que je shoote des processus qui ne sont pas lancés.
Il faut donc que j'effectue un 2ème test pour savoir si le processus est lancé avant de le shooter
bon je vais lire en profondeur tout vos postes
Je vais vous expliquer un peu le but du script
On doit effectuer une sauvegarde de la base de notre ERP
il y a 2 sites, un finit à 13h00 et l'autre commence à 13h00 ...
on a donc réservé la plage horaire de 12h45 et 13h00 pour effectuer la sauvegarde
le problème c'est qu'il y a toujours des gens qui restent connectés (malgré les notes de service et nombreux rappels ...)
donc d'habitude on les shoote un par un (des fois le temps de les shooter et de lancer la sauvegarde ils se reconnectent
bref c'est chiant (et on est feignant
le but du script :
voir sur quelles machines l'erp est lancé, puis les shooter et lancer la sauvegarde
sur mon dernier jet,je détecte les machines allumées et je shoote bien le processus
mon problème est que j'ai de nouveau une erreur vu que je shoote des processus qui ne sont pas lancés.
Il faut donc que j'effectue un 2ème test pour savoir si le processus est lancé avant de le shooter
bon je vais lire en profondeur tout vos postes
Connexion ou Créer un compte pour participer à la conversation.
- PASCAULT
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 17 ans 5 mois #2934
par PASCAULT
Réponse de PASCAULT sur le sujet Re:Ne pas afficher les erreurs
Il n'est pas possible de stopper l'accés à l'erp le tps de la sauvegarde ?
Arrêt de la bdd ou d'un service, de l'appli, d'un port ip ?
Les utilisateurs accèdent comment à l'ERP ?
Arrêt de la bdd ou d'un service, de l'appli, d'un port ip ?
Les utilisateurs accèdent comment à l'ERP ?
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 17 ans 5 mois #2937
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Ne pas afficher les erreurs
Nostra écrit:
Dans ce cas tu dois trapper l'erreur \"kill process= fail\"
Vous êtes sûr de ne pas remettre en cause l'intégrité de la base de votre ERP en procédant ainsi ?
Je ne comprend pas. Si tu demandes la liste des process actifs il ne peut y avoir d'erreur sauf si l'utilisateur modifie qq chose pendant/après ton interrogation.mon problème est que j'ai de nouveau une erreur vu que je shoote des processus qui ne sont pas lancés.
Il faut donc que j'effectue un 2ème test pour savoir si le processus est lancé avant de le shooter
Dans ce cas tu dois trapper l'erreur \"kill process= fail\"
Vous êtes sûr de ne pas remettre en cause l'intégrité de la base de votre ERP en procédant ainsi ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.103 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Ne pas afficher les erreurs