PowerShell Script Firewall

Le
Robby
Bonjour,

Est-il possible de savoir les ports ouverts d'un ordi distant du firewall XP
SP2 ?
Avec un script gwmi ou autre ?

Merci d'avance,
Robby
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacques Barathon [MS]
Le #660557
"Robby" news:%23$
Bonjour,

Est-il possible de savoir les ports ouverts d'un ordi distant du firewall
XP SP2 ?
Avec un script gwmi ou autre ?


A ma connaissance, il n'y a rien dans WMI pour piloter ou interroger le
firewall Windows. Il faut passer par la commande netsh, par exemple:

PS> $poste = "PC_Durand"
PS> netsh -r $poste firewall show portopening

Si l'on veut décortiquer le résultat pour une éventuelle réutilisation, il
faut faire un bout de script qui va "parser" la sortie de netsh. Pas bien
compliqué, mais il faut voir selon le besoin exact.

Jacques

Robby
Le #660275
Bonjour,
J'ai essayé avec un script PS mais voila l'erreur.
La commande suivante n'a pas été trouvée : firewall show portopening
PS C:Documents and Settingsfabrice.bruscia> .fireinfo.ps1
La commande suivante n'a pas été trouvée : firewall show conf.

Merci d'avance,

"Jacques Barathon [MS]" message de news:
"Robby" news:%23$
Bonjour,

Est-il possible de savoir les ports ouverts d'un ordi distant du firewall
XP SP2 ?
Avec un script gwmi ou autre ?


A ma connaissance, il n'y a rien dans WMI pour piloter ou interroger le
firewall Windows. Il faut passer par la commande netsh, par exemple:

PS> $poste = "PC_Durand"
PS> netsh -r $poste firewall show portopening

Si l'on veut décortiquer le résultat pour une éventuelle réutilisation, il
faut faire un bout de script qui va "parser" la sortie de netsh. Pas bien
compliqué, mais il faut voir selon le besoin exact.

Jacques



Robby
Le #660274
J'ai trouvé ceci sur le site de Microsoft.
Il est impossible d'utiliser les commandes netsh firewall pour configurer à
distance les paramètres du Pare-feu Windows ;
Est-ce pareil, pour faire une requete d'information ?
Merci d'avance,

"Jacques Barathon [MS]" message de news:
"Robby" news:%23$
Bonjour,

Est-il possible de savoir les ports ouverts d'un ordi distant du firewall
XP SP2 ?
Avec un script gwmi ou autre ?


A ma connaissance, il n'y a rien dans WMI pour piloter ou interroger le
firewall Windows. Il faut passer par la commande netsh, par exemple:

PS> $poste = "PC_Durand"
PS> netsh -r $poste firewall show portopening

Si l'on veut décortiquer le résultat pour une éventuelle réutilisation, il
faut faire un bout de script qui va "parser" la sortie de netsh. Pas bien
compliqué, mais il faut voir selon le besoin exact.

Jacques



Jacques Barathon [MS]
Le #660273
"Robby" news:
J'ai trouvé ceci sur le site de Microsoft.
Il est impossible d'utiliser les commandes netsh firewall pour configurer
à distance les paramètres du Pare-feu Windows ;
Est-ce pareil, pour faire une requete d'information ?


En effet, ma solution ne marche pas telle quelle. Désolé. Une solution
alternative consiste à faire exécuter le script sur la machine distante, par
exemple avec psexec (voir le site www.microsoft.com/technet/sysinternals
pour récupérer cet outil très pratique), ou avec schtasks en programmant la
tâche dans les minutes qui suivent, ou encore en créant un process sur la
machine distante. L'avantage de la solution psexec est qu'elle est bcp plus
simple à mettre en oeuvre que les autres. Elle permet notamment de récupérer
la sortie standard de la commande sur le poste de l'administrateur.

Jacques

Robby
Le #660272
ok ca marche avec psexec, et en plus je mets le resultat dans un txt.
Par contre si je dois faire ceci pour 50 machines cela devient lourd
Super et encore merci.

"Jacques Barathon [MS]" message de news: %
"Robby" news:
J'ai trouvé ceci sur le site de Microsoft.
Il est impossible d'utiliser les commandes netsh firewall pour configurer
à distance les paramètres du Pare-feu Windows ;
Est-ce pareil, pour faire une requete d'information ?


En effet, ma solution ne marche pas telle quelle. Désolé. Une solution
alternative consiste à faire exécuter le script sur la machine distante,
par exemple avec psexec (voir le site
www.microsoft.com/technet/sysinternals pour récupérer cet outil très
pratique), ou avec schtasks en programmant la tâche dans les minutes qui
suivent, ou encore en créant un process sur la machine distante.
L'avantage de la solution psexec est qu'elle est bcp plus simple à mettre
en oeuvre que les autres. Elle permet notamment de récupérer la sortie
standard de la commande sur le poste de l'administrateur.

Jacques



Jacques Barathon [MS]
Le #660269
"Robby" news:
ok ca marche avec psexec, et en plus je mets le resultat dans un txt.
Par contre si je dois faire ceci pour 50 machines cela devient lourd
Super et encore merci.


Si tu as la liste de tous tes serveurs dans un fichier texte ou CSV, tu peux
facilement la parcourir. En admettant que tu aies un fichier serveurs.txt
qui contienne un nom de serveur par ligne (sans les "\"), tu peux taper
ceci:

get-content serveurs.txt | foreach {psexec \$_ netsh firewall show
portopening | out-file "$_.txt"}

Tu te retrouveras avec un fichier texte par serveur, nom_du_serveur.txt,
contenant le résultat de la commande. Tu peux également mettre tous les
résultats dans un seul fichier texte en ajoutant le paramètre -append à la
commandelette out-file, mais dans ce cas-là il faut également ajouter un
en-tête qui précise le nom du serveur parce que le résultat sauvegardé ne le
mentionne nulle part. Je te laisse broder sur cet exemple selon ton besoin
final.

Jacques

Robby
Le #659988
Je n'ai pas de fichier csv ou txt des mes noms de machines (pourquoi tu
parles de serveur ?), mais
tu voudrais que je recupere le nom des ordi de l'AD avec par ex: LDIFDE et
ensuite il faudrait
qu'il soit constituer comment le fichier ?
ou tout simplement mettre les noms d'ordi dans un fichier txt ?
et dans la commande psexec \$_ , ca correspond à quoi ?
Merci d'avance,

"Jacques Barathon [MS]" message de news:
"Robby" news:
ok ca marche avec psexec, et en plus je mets le resultat dans un txt.
Par contre si je dois faire ceci pour 50 machines cela devient lourd
Super et encore merci.


Si tu as la liste de tous tes serveurs dans un fichier texte ou CSV, tu
peux facilement la parcourir. En admettant que tu aies un fichier
serveurs.txt qui contienne un nom de serveur par ligne (sans les "\"), tu
peux taper ceci:

get-content serveurs.txt | foreach {psexec \$_ netsh firewall show
portopening | out-file "$_.txt"}

Tu te retrouveras avec un fichier texte par serveur, nom_du_serveur.txt,
contenant le résultat de la commande. Tu peux également mettre tous les
résultats dans un seul fichier texte en ajoutant le paramètre -append à la
commandelette out-file, mais dans ce cas-là il faut également ajouter un
en-tête qui précise le nom du serveur parce que le résultat sauvegardé ne
le mentionne nulle part. Je te laisse broder sur cet exemple selon ton
besoin final.

Jacques



Jacques Barathon [MS]
Le #659983
"Robby" news:
Je n'ai pas de fichier csv ou txt des mes noms de machines (pourquoi tu
parles de serveur ?), mais


Petite erreur de ma part, j'ai mélangé ton post avec un autre où on parlait
de serveurs. Peu importe, l'idée c'est de fournir automatiquement les noms
des machines à la "moulinette" qui exécutera netsh sur chacune d'entre
elles.

tu voudrais que je recupere le nom des ordi de l'AD avec par ex: LDIFDE et
ensuite il faudrait qu'il soit constituer comment le fichier ?
ou tout simplement mettre les noms d'ordi dans un fichier txt ?


Dans l'exemple que je fournissais, le format d'entrée consiste en une simple
liste avec un nom de machine par ligne. Par exemple:

pc-durand
pc-dupont
pc-martin
compta-xp
admin-xp
...

et dans la commande psexec \$_ , ca correspond à quoi ?


Dans un bloc de commandes PowerShell, $_ correspond à l'objet en cours
fourni en entrée par le pipeline. En l'occurrence, on est dans une boucle
foreach {...} qui reçoit en entrée les lignes de serveurs.txt une à une. A
chaque itération de foreach, $_ correspond donc à la ligne en cours.
J'ajoute "\" devant pour reproduire le paramètre qu'on doit passer à psexec
pour exécuter une commande sur une machine distante.

De la même façon, je redirige le résultat dans un fichier texte portant le
nom de la machine en utilisant la forme "$_.txt". Là aussi, $_ représente le
nom de la machine en cours de traitement. Contrairement au premier cas, là
je suis obligé de mettre $_.txt entre guillemets sinon PowerShell va croire
que je parle de la propriété txt de l'objet $_. Les guillemets signalent de
manière explicite que je fais une concaténation de texte $_ + point + txt.

Si tu n'as pas encore bien assimilé ces concepts de base de PowerShell, je
te conseille la lecture des docs fournies en standard. Tu devrais les
trouver dans le groupe de programmes installé dans le menu Démarrer, ou tu
peux lancer leur ouverture directement depuis une session PowerShell:

PS> pushd $pshomedocumentsen-us
PS> dir
...
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 25/01/2007 16:31 2595642 GettingStarted.rtf
-a--- 25/01/2007 16:31 319938 QuadFold.rtf
-a--- 25/01/2007 16:31 11544 releaseNotes.rtf
-a--- 25/01/2007 16:31 2871409 UserGuide.rtf

PS> ii GettingStarted.rtf
...
PS> popd

Pour résumer rapidement ce que je fais dans les lignes ci-dessus:

"pushd" va dans le répertoire indiqué mais conserve en mémoire le répertoire
d'où l'on vient. Cela permettra d'y revenir facilement par la suite. C'est
très pratique quand on veut juste visiter une arborescence sans perdre
complètement le fil d'où on était avant.

Le répertoire dans lequel je me rends est le répertoire d'installation de
PowerShell, stocké dans la variable prédéfinie $pshome. Il a un
sous-répertoire documents pour la documentation, est dans mon cas la doc
est dans un sous-répertoire en-US. A toi de voir selon ton installation
s'il y a un répertoire fr-FR ou autre.

Comme tu peux le voir, ce répertoire contient des guides au format RTF. Il
me suffit d'en choisir un, en l'occurrence GettingStarted.rtf et de l'ouvrir
en utilisant "ii", le raccourci pour la commandelette invoke-item. Cette
commandelette ouvre le fichier avec l'application déclarée dans Windows pour
ouvrir ce type de fichier. Dans mon cas, le fichier s'ouvre dans Word.

Une fois que j'ai fini ma consultation des guides, je peux revenir à mon
répertoire de départ en tapant "popd". "popd" reprend tout simplement le
répertoire mémorisé par "pushd".

On s'est un peu éloignés du sujet de départ, mais ça peut te permettre
d'avancer plus vite si tu prends le temps de lire quelques-uns de ces
documents.

Bon courage,
Jacques

Robby
Le #659696
Bonjour Jacques et merci,
mais biensur je rencontre des soucis, voici l'erreur :
Le terme « psexec » n'est pas reconnu en tant qu'applet de commande,
fonction, programme exécutable ou fichier de scrip
t. Vérifiez le terme et réessayez.
Au niveau de ligne : 1 Caractère : 39
+ get-content ordi.txt | foreach {psexec <<<< \$_ netsh firewall show
portopening | out-file "$_.txt"}
Le terme « psexec » n'est pas reconnu en tant qu'applet de commande,
fonction, programme exécutable ou fichier de scrip
t. Vérifiez le terme et réessayez.
Au niveau de ligne : 1 Caractère : 39
+ get-content ordi.txt | foreach {psexec <<<< \$_ netsh firewall show
portopening | out-file "$_.txt"}
pourtant j'ai bien tapé la commnde ;:
PS D:SAV Script PowerShell> get-content ordi.txt | foreach {psexec \$_
netsh firewall show portopening | o
ut-file "$_.txt"}


"Jacques Barathon [MS]" message de news:
"Robby" news:
Je n'ai pas de fichier csv ou txt des mes noms de machines (pourquoi tu
parles de serveur ?), mais


Petite erreur de ma part, j'ai mélangé ton post avec un autre où on
parlait de serveurs. Peu importe, l'idée c'est de fournir automatiquement
les noms des machines à la "moulinette" qui exécutera netsh sur chacune
d'entre elles.

tu voudrais que je recupere le nom des ordi de l'AD avec par ex: LDIFDE
et ensuite il faudrait qu'il soit constituer comment le fichier ?
ou tout simplement mettre les noms d'ordi dans un fichier txt ?


Dans l'exemple que je fournissais, le format d'entrée consiste en une
simple liste avec un nom de machine par ligne. Par exemple:

pc-durand
pc-dupont
pc-martin
compta-xp
admin-xp
...

et dans la commande psexec \$_ , ca correspond à quoi ?


Dans un bloc de commandes PowerShell, $_ correspond à l'objet en cours
fourni en entrée par le pipeline. En l'occurrence, on est dans une boucle
foreach {...} qui reçoit en entrée les lignes de serveurs.txt une à une. A
chaque itération de foreach, $_ correspond donc à la ligne en cours.
J'ajoute "\" devant pour reproduire le paramètre qu'on doit passer à
psexec pour exécuter une commande sur une machine distante.

De la même façon, je redirige le résultat dans un fichier texte portant le
nom de la machine en utilisant la forme "$_.txt". Là aussi, $_ représente
le nom de la machine en cours de traitement. Contrairement au premier cas,
là je suis obligé de mettre $_.txt entre guillemets sinon PowerShell va
croire que je parle de la propriété txt de l'objet $_. Les guillemets
signalent de manière explicite que je fais une concaténation de texte $_ +
point + txt.

Si tu n'as pas encore bien assimilé ces concepts de base de PowerShell, je
te conseille la lecture des docs fournies en standard. Tu devrais les
trouver dans le groupe de programmes installé dans le menu Démarrer, ou tu
peux lancer leur ouverture directement depuis une session PowerShell:

PS> pushd $pshomedocumentsen-us
PS> dir
...
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 25/01/2007 16:31 2595642 GettingStarted.rtf
-a--- 25/01/2007 16:31 319938 QuadFold.rtf
-a--- 25/01/2007 16:31 11544 releaseNotes.rtf
-a--- 25/01/2007 16:31 2871409 UserGuide.rtf

PS> ii GettingStarted.rtf
...
PS> popd

Pour résumer rapidement ce que je fais dans les lignes ci-dessus:

"pushd" va dans le répertoire indiqué mais conserve en mémoire le
répertoire d'où l'on vient. Cela permettra d'y revenir facilement par la
suite. C'est très pratique quand on veut juste visiter une arborescence
sans perdre complètement le fil d'où on était avant.

Le répertoire dans lequel je me rends est le répertoire d'installation de
PowerShell, stocké dans la variable prédéfinie $pshome. Il a un
sous-répertoire documents pour la documentation, est dans mon cas la doc
est dans un sous-répertoire en-US. A toi de voir selon ton installation
s'il y a un répertoire fr-FR ou autre.

Comme tu peux le voir, ce répertoire contient des guides au format RTF. Il
me suffit d'en choisir un, en l'occurrence GettingStarted.rtf et de
l'ouvrir en utilisant "ii", le raccourci pour la commandelette
invoke-item. Cette commandelette ouvre le fichier avec l'application
déclarée dans Windows pour ouvrir ce type de fichier. Dans mon cas, le
fichier s'ouvre dans Word.

Une fois que j'ai fini ma consultation des guides, je peux revenir à mon
répertoire de départ en tapant "popd". "popd" reprend tout simplement le
répertoire mémorisé par "pushd".

On s'est un peu éloignés du sujet de départ, mais ça peut te permettre
d'avancer plus vite si tu prends le temps de lire quelques-uns de ces
documents.

Bon courage,
Jacques



Jacques Barathon [MS]
Le #659691
"Robby" news:%
Bonjour Jacques et merci,
mais biensur je rencontre des soucis, voici l'erreur :
Le terme « psexec » n'est pas reconnu en tant qu'applet de commande,
fonction, programme exécutable ou fichier de scrip


As-tu mis l'exécutable psexec.exe dans un répertoire présent dans le PATH?
Si tu l'as simplement mis dans le répertoire en cours et que celui n'est pas
déclaré dans le PATH, il faut que tu le spécifies en écrivant .psexec au
lieu de psexec. C'est une mesure de sécurité de PowerShell pour éviter que
l'utilisateur exécute par inadvertance un malware qui se serait glissé dans
le répertoire en cours en reprenant le nom d'un exécutable standard.

Jacques

Publicité
Poster une réponse
Anonyme