Question PS + wmic réseau + page web

Plus d'informations
il y a 14 ans 10 mois #9512 par calvat
Bonjour à tous :)

Cela fais maintenant un peu moins d'un mois que je programme en Powershell et j'avoue que je commence à être assez fan. J'ai acheté le livre pour m'auto-former et je félicite vraiment les auteurs, le livre est génial et ne me quitte plus !

Description du code: Le script a été écris sous ps v2. Le script doit détecter et calculer tous les paramètres selon votre réseau, scanner chaque ordinateurs pour trouver les services lancées ou non. On retrouve cela un peu dans le livre mais j'ai voulu développer un peu plus \"l'interface\" web.


Je souhaite à chaque fois que celui qui lance un de mes scripts il n'est plus rien à faire qu'à entrer le login et le mot de passe. J'ai encore des choses à régler pour ce script.

Avant d'aller plus loin, je trouve le script lourd comme je l'ai écris. Du coup, je souhaiterais juste avoir des directions, des notions et ce qui est à revoir pour optimiser mon script :)

[code:1]#
# Listes des services sur les ordinateurs du réseau.
#
$service = ''

#Calcul des adresses réseau automatiquement.
$netlocal = get-wmiobject win32_networkadapterconfiguration | where {$_.ipenabled -eq \"true\"}

$ip = \"$($netlocal.ipaddress)\"
$ip = $ip.split()
$ip = $ip[0]

$masque = \"$($netlocal.ipsubnet)\"
$masque = $masque.split()
$masque = $masque[0]

#Définition de l'@ réseau et de la plage
$ip = $ip.split('.')
$masque = $masque.split('.')

$a = $ip[0] -band $masque[0]
$b = $ip[1] -band $masque[1]
$c = $ip[2] -band $masque[2]
$d = $ip[3] -band $masque[3]

#Adresse réseau
$netaddr = \"$a.$b.$c.$d\"


#Nombre de machine
$e = 255 - $masque[0]
$f = 255 - $masque[1]
$g = 255 - $masque[2]
$h = 255 - $masque[3]

#Wildcast
$hote = \"$e.$f.$g.$h\"


#calcul du nombre d'hôtes sur le réseau
$i = $a + $e
$j = $b + $f
$k = $c + $g
$l = $d + $h

#Adresse broadcast
$broadcast = \"$i.$j.$k.$l\"

#Premier hôte sur le réseau
$d += 1
$premier = \"$a.$b.$c.$d\"

#Dernier hôte sur le réseau
$l -= 1
$dernier = \"$i.$j.$k.$l\"

#Nombre de machine dans la plage
$e++
$f++
$g++
$h++

$nbrhote = $e * $f * $g * $h - 2

#
#Estimation du temps maximum du scan: 10 secondes x le nombre de machines
$temps = 10 * $nbrhote / 3600
write-host \"`nIl peut y avoir $nbrhote sur le réseau\"
write-host \"Estimation du temps maximum du scan : $temps heures\"

#
#Demande de l'identifiant et du mot de pase administrateur
$bureau = (get-childitem env:userprofile).value
$bureau += '\desktop'
$css = get-content $bureau\style.css

new-item -path $bureau -type directory -name 'Service_reseau' -force
remove-item $bureau\Service_reseau\*.html

$cred = $host.ui.PromptForCredential(\"Accès à distance\", \"Entrer votre identifitant et votre mot de passe administrateur :\", \"\", \"\"«»)

$ip = \"$a.$b.$c\"
$liens = ''
$ping = new-object system.net.networkinformation.ping


#Hote distant à scanner
for ($i = $d; $i -le $l; $i++) {

#
#Pourcentage d'avancement
$pourcent = $i / $l * 100
$pourcent = \"$pourcent\"
$pourcent = $pourcent.split('.')
$pourcent = $pourcent[0]

write-host \"`nPourcentage d'avancement: $pourcent%\"


$ipdst = \"$ip.$i\"
write-host \"Scan de $ipdst en cours...\"


$resultat = $ping.send(\"$ipdst\"«»)

if ($resultat.status -eq 'Success') {


#
#Génération des pages web

gwmi win32_service -computer $ipdst -credential $cred | sort-object name | convertto-html -property name, displayname, state -head $css -body \"<h2>Etat des services de $ipdst</h2>\" |
foreach {
if ($_ -match '<td>Running</td>')
{
$_ -replace '<tr>', '<tr bgcolor=green>'
}
elseif ($_ -match '<td>Stopped</td>')
{
$_ -replace '<tr>', '<tr bgcolor=red>'
}
else
{
$_
}

} | out-file $bureau\Service_reseau\$ipdst.html

$errorlevel = $?

$service += \"$(get-content $bureau\Service_reseau\$ipdst.html)\"

if ($errorlevel -eq 'True') {
$liens += \"<tr><td style=\"\"background-color: green\"\"><a href='$bureau\Service_reseau\$ipdst.html'>$ipdst<br></a>Connecté et le scan a réussit</td></tr> `n\"
}
else {
\"<p>$error[0]</p>\" > $bureau\Service_reseau\$ipdst.html
$liens += \"<tr><td style=\"\"background-color: red\"\"><a href='$bureau\Service_reseau\$ipdst.html'>$ipdst<br></a>Connecté mais le scan a échoué</td></tr> `n\"
}
}

if ($resultat.status -eq 'DestinationHostUnreachable') {
$liens += \"<tr><td>$ipdst<br>Non connecté</td></tr> `n\"
}




}




#
#Creation de la page web Acceuil
$page = @\"
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">;
<html xmlns=\"www.w3.org/1999/xhtml\"; xml:lang=\"fr\" >
<head>
<title>Etats des ordinateurs.</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />

<style type='text/css'>
body {
background-color: #92b1ff;
}
p {
padding-left: 2%;
border: 2px inset black;
}
td {
border: 2px inset black;
padding: 5px;
margin: 3px;
}
td a {
color: white;
text-decoration: none;
}
p a {
color: black;
text-decoration: none;
}
.menu {
float: left;
width: 10%;
}
.resultat {
border: 2px inset black;
width: 80%;
margin-left: 11%;
background-color: white;
position: fixed;
}
.resultat p {
border: none;
}
</style>

</head>
<body>
<p style=\"font-size: 200%; background-color: white;\"><a href=\"$bureau\Service_reseau\index.html\">Bienvenue dans l'interface de gestion des ordinateurs</a></p>

<div class=\"menu\">
<table style=\"background-color: white\">
$liens
</table>
</div>

<div class=\"resultat\">
<p>
Bonjour,<br><br>

Cette page a été généré grâce à un script powershell v2. Le script a été essayé sur Windows 7 Ultimate et Google chrome.
</p>
</div>


</body>
</html>
\"@ | out-file $bureau\Service_reseau\index.html


#
#Génération de chaque page par ip
$service = $service -split \"</html>\"

for ($i = 0; $i -le 20; $i++) {

$ipdst = \"$ip.$i\"

$contenu = $service[$i-1]


$page = @\"
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">;
<html xmlns=\"www.w3.org/1999/xhtml\"; xml:lang=\"fr\" >
<head>
<title>Etats des ordinateurs.</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />

<style type='text/css'>
body {
background-color: #92b1ff;
}
p {
border: 2px inset black;
}
td {
border: 2px inset black;
padding: 5px;
margin: 3px;
}
td a {
color: white;
text-decoration: none;
}
p a {
color: black;
text-decoration: none;
}
.menu {
float: left;
width: 10%;
}
.resultat {
border: 2px inset black;
width: 80%;
height: 80%;
overflow: scroll;
margin-left: 11%;
padding-left: 2%;
background-color: white;
position: fixed;
}
</style>

</head>
<body>
<p style=\"font-size: 200%; background-color: white; padding-left: 2%;\"><a href=\"$bureau\Service_reseau\index.html\">Bienvenue dans l'interface de gestion des ordinateurs</a></p>

<div class=\"menu\">
<table style=\"background-color: white\">
$liens
</table>
</div>

<div class=\"resultat\">
$contenu
</div>


</body>
</html>
\"@ | out-file $bureau\Service_reseau\$ipdst.html

}


sl $bureau\Service_reseau\
.\index.html
[/code:1]

Voici un aperçu de \"l'interface\"
nsa26.casimages.com/img/2011/04/28/110428111734776406.jpg


Merci et à bientôt :)


La pièce jointe services.ps1 est absente ou indisponible



Message édité par: apex, à: 28/04/11 23:11<br><br>Message édité par: apex, à: 28/04/11 23:13

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

Plus d'informations
il y a 14 ans 10 mois #9524 par calvat
Réponse de calvat sur le sujet Re:PS + wmic réseau + page web
Je m'excuse par avance, je pense après coup avoir poster au mauvais endroit. Je pense que mon post serait plus approprié dans la section 'Entraide pour les débutants'

Merci :)

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

Temps de génération de la page : 0.041 secondes
Propulsé par Kunena