Question Ne pas afficher les erreurs

Plus d'informations
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... ;)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
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... ;)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 5 mois #2928 par Laurent Dardenne
Nostra écrit:

bon passer par un fichier c'est vraiment pas propre

Disons qu'on peut s'en passer en utilisant un filtre :
[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:

je pense qu'on peut mettre ça dans un tableau

Oui par défaut le pipeleine crée 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.

Plus d'informations
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 :angry: )

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.

Plus d'informations
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 ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 5 mois #2937 par Laurent Dardenne
Nostra écrit:

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

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.
Dans ce cas tu dois trapper l'erreur \&quot;kill process= fail\&quot;
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
Propulsé par Kunena