[R] Exécuter un script Powershell avec une requête HTTP

Capteurs et actionneurs HTTP

[R] Exécuter un script Powershell avec une requête HTTP

Messagepar PetitMalin » 02 Juin 2014 14:35

Bonjour a tous,

Ayant virtualisé mes machines physiques (sous ESXi 5.5) je me retrouve dans l'impasse de la fonctionnalité du WOL pour lancer mes VM's (beaucoup de personnes dans le même cas que moi...selon les forums VMWare)

Du coup je me suis tourné vers l'outil PowerCLI de VMWare(permet de scripter notamment l'allumage/extinction des VM's) avec un script PowerShell qui lui va être lancé a partir d'un fichier bat

Et la (c'est le drame...) impossible de trouver une méthode pour exécuter en requête http mes scripts bat
Quelqu'un aurait-il déjà trouver une méthode ?!?

Ps: les scripts se trouvent sur une VM W7 (qui elle tourne constamment) et qui allume ou éteint deux autres VMs selon les scénarios de l'Eedomus.
Dernière édition par PetitMalin le 04 Juin 2014 13:08, édité 3 fois.
PetitMalin
 
Messages : 26
Inscription : 20 Août 2013

Re: Exécuter un fichier bat avec une requête HTTP ???

Messagepar alexzen » 02 Juin 2014 19:58

Vite fait comme ca, pourquoi ne pas faire un fichier php dans lequel tu fais un shell_exec pour lancer une commande locale dans ta vm afin de faire du wol sur les autres.

Possible ?
Rfxtrx USB, Karotz, N40L pour Plex et des vm, 2 Rpi, 4 Squeezebox Radio + 1 Squeezeslave sur Rpi, des fib en rot, des or en gon et des con de cha.
alexzen
 
Messages : 84
Inscription : 18 Mars 2013

Re: Exécuter un fichier bat avec une requête HTTP ???

Messagepar galaksy2001 » 02 Juin 2014 20:52

Il existe des lignes de commande pour allumer ou éteindre des VMs. Il doit bien y avoir un moyen de les insérer dans un fichier php ...

Edit : exemple pour démarrer une VM :

vmrun -T server -h http://localhost:8222/sdk -u Login -p Mot_de_passe start "[Database] Chemin/machine.vmx"
galaksy2001
 
Messages : 727
Inscription : 06 Jan 2014

Re: Exécuter un fichier bat avec une requête HTTP ???

Messagepar PetitMalin » 03 Juin 2014 13:34

Bonjour et merci pour vos réponses !!!

Effectivement j'avais commencé a regarder du coté php hier soir (avec installation de Xampp pour interpréter :lol: c'est mieux...)
Finalement j'ai réussi a trouver mon bonheur avec un script php



alexzen a écrit:Possible ?


Non le WOL bloque apparemment au niveau du switch "virtuel" VMWare (Avec PowerCLI tu incorpores les commandes VMWare dans PowerShell et cela te permet l'utilisation GUI de VSPhere en ligne de commande.

galaksy2001 a écrit:Il existe des lignes de commande pour allumer ou éteindre des VMs. Il doit bien y avoir un moyen de les insérer dans un fichier php ...


Vu que c'est PowerCLI qui peut être interprété dans PowerShell je suis pas sur...
Mais on peut tout a fait lancer un script PowerShell a partir de php

Je teste ce soir la modif pour directement lancer les fichiers PS1 a partir du script et le post pour partager l'info
PetitMalin
 
Messages : 26
Inscription : 20 Août 2013

Re: Exécuter un fichier bat avec une requête HTTP ???

Messagepar galaksy2001 » 03 Juin 2014 13:43

Ok, ça m'intéresse ;)
galaksy2001
 
Messages : 727
Inscription : 06 Jan 2014

Re: Exécuter un fichier bat avec une requête HTTP ???

Messagepar PetitMalin » 04 Juin 2014 13:05

Eh ben après pas mal de déboire voici une commande et un script fonctionnels !!!

Prérequis:
- Xampp (le service Apache suffit, version portable 1.8.2.4 par exemple)
- PowerCLI 5.5.0 pour l'interface avec PowerShell (déja présent sur Windows7)

Pour le script PHP
Code : Tout sélectionner
<?php
if(isset($_GET["syno"]))
{
$syno=$_GET["syno"];
if($syno=="on") exec('powershell.exe -ExecutionPolicy RemoteSigned -command D:\scripts\Pwron_syno.ps1');
if($syno=="off") exec('powershell.exe  -ExecutionPolicy RemoteSigned -command D:\scripts\Pwroff_syno.ps1');
}
?>


la variable "syno" correspond au nom de la machine a controller
(Dans notre exemple une VM avec un OS SYNOLOGY virtualisé)

Pour le script Powershell ON:

Code : Tout sélectionner
Add-PSSnapin VMware.VimAutomation.Core 
$vcenter="192.168.1.1"
$strNewVMName = "VM_SYNO_001"
#Connect to vcenter server 
connect-viserver $vcenter  -User 'root' -Password 'pass'
#Generate a view for vm to determine power state 
    $vm = Get-View -ViewType VirtualMachine -Filter @{"Name" = $strNewVMName} 
     
    if ($vm.Runtime.PowerState -ne "PoweredOn") { 
           
            Write-Host "Powering On $strNewVMName ----" 
            Get-VM $strNewVMName | Start-VM 
            Sleep 10                           
         
           
     } 
 
write-host "Sleeping ..." 
Sleep 120
#Disconnect to vcenter server 
disconnect-viserver $vcenter -Confirm:$false


$vcenter= Adresse IP du serveur ESXi
$strNewVMName = Nom de la VM
-User 'root' -Password 'pass' (nom et mot de passe du compte existant sur ESXi)


Pour le script Powershell OFF:

Code : Tout sélectionner
Add-PSSnapin VMware.VimAutomation.Core 
$vcenter="192.168.1.1" 
$strNewVMName = "VM_SYNO_001"
#Connect to vcenter server 
connect-viserver $vcenter  -User 'root' -Password 'pass'
 
    #Generate a view for vm to determine power state 
    $vm = Get-View -ViewType VirtualMachine -Filter @{"Name" = $strNewVMName} 
    #If vm is powered on then VMware Tools status is checked 
           if ($vm.Runtime.PowerState -ne "PoweredOff") { 
               if ($vm.config.Tools.ToolsVersion -ne 0) { 
                   Write-Host "VMware tools installed. Graceful OS shutdown ++++++++ $strNewVMName ----" 
                   Shutdown-VMGuest $strNewVMName -Confirm:$false 
                                   
               } 
               else { 
                      Write-Host "VMware tools not installed. Force VM shutdown ++++++++ $strNewVMName ----" 
                      Stop-VM $strNewVMName -Confirm:$false                               
                   
               } 
           }   
write-host "Sleeping ..." 
Sleep 120 
#Disconnect vcenter server 
disconnect-viserver $vcenter -Confirm:$false


Ps: Dans PowerShell vérifier l'état de la sécurité avec :
Code : Tout sélectionner
 get-executionPolicy

Si "Restricted" alors entrer
Code : Tout sélectionner
set-executionPolicy RemoteSigned

et enfin vérifier avec
Code : Tout sélectionner
 get-executionPolicy


Et enfin la requête Eedomus :

Créer une requête HTTP actionneur
Créer deux valeurs dans valeurs :
Dans les valeurs en URL:
Code : Tout sélectionner
http://192.168.1.xxx/scripts/script.php

Et dans les paramètres
Code : Tout sélectionner
?syno=on
et dans la seconde
Code : Tout sélectionner
?syno=off


192.168.1.xxx correspond au nom de machine qui utilise Xampp avec les scripts powershell et php
/scripts/script.php correspond au chemin ou se trouve le script php (dossier htdocs dans Xampp)

Si vous avez d'autres questions... 8-)
Dernière édition par PetitMalin le 04 Juin 2014 13:32, édité 1 fois.
PetitMalin
 
Messages : 26
Inscription : 20 Août 2013

Re: [R] Exécuter un script Powershell avec une requête HTTP

Messagepar Nico33 » 04 Juin 2014 13:22

Je n'utilise pas de machines virtuelles mais merci pour le partage qui sera sûrement utile à d'autres.
Nico33
 
Messages : 1013
Inscription : 14 Juin 2013


Retour vers Requêtes HTTP

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 20 invité(s)