Per varie ragioni (che non includono solamente il masochismo) voglio portare una procedurina di monitoraggio che ho scritto in Perl sotto Linux in ambiente Windows.
Volendo usare un linguaggio script nativo in ambiente Windows per evitare di installare programmi di qualsiasi tipo sulla macchina da monitorare, decido di usare la PowerShell.
Prima sorpresa: Microsoft distribuisce un (a suo dire) potente interprete di comandi e di script in cui l’esecuzione degli script è bloccata per default. Vabbè, la cosa si risolve creando (o modificando) la chiave di registro HKEY_Local_MachineSOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowershellExecutionPolicy
con valore Unrestricted
. Benedetta Microsoft!
Ok, gli script ora sono eseguibili.
Veniamo allo scopo del test: creare uno script che prende una variabile data e la invia ad un server tramite HTTP POST (ovvero simulando la compilazione di un form) e recuperare la risposta del server.
Svolgimento in PERL:
$ua = LWP::UserAgent->new;
$req = (POST "http://pippo", ["campo1" => "valore1", "campo2" => "valore2"]);
$risposta = $ua->request($req);
Svolgimento in PowerShell:
[Reflection.Assembly]::LoadFile('C:WINDOWSMicrosoft.NETFrameworkv2.0.50727System.Web.dll') | out-null
$postData = 'campo1=valore1&campo2=valore2'
$buffer = [text.encoding]::ascii.getbytes($postData)
[net.httpWebRequest] $req = [net.webRequest]::create('http://pippo')
$req.method = "POST"
$req.ContentType = "application/x-www-form-urlencoded"
$req.ContentLength = $buffer.length
$req.TimeOut = 5000
$reqst = $req.getRequestStream()
$reqst.write($buffer, 0, $buffer.length)
$reqst.flush()
$reqst.close()
[net.httpWebResponse] $res = $req.getResponse()
$resst = $res.getResponseStream()
$sr = new-object IO.StreamReader($resst)
$risposta = $sr.ReadToEnd()
E per fortuna che è una shell power!!!
Leave a Reply