22 jul

PowerCLI + PHP + CentOS

<!--?php
//run http://127.0.0.1/vmware_power.php?install=y to install and configure powercli to apache user
if(array_key_exists ( "install" ,$_GET ) && $_GET["install"]=="y")
{
	$PowerCliCommand='export HOME=/tmp/ && pwsh -c "& {Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP \$false -Confirm:\$false; Import-Module \"VMware.VimAutomation.Core\"; Set-PowerCLIConfiguration -InvalidCertificateAction "Ignore" -Confirm:\$false; Set-PowerCLIConfiguration -DefaultVIServerMode multiple -Confirm:\$false}"';
	exec($PowerCliCommand, $Output, $ErrorReturned);
	echo(implode ( '<br-->' , $Output ));
}
else
{
	$vSphereIP = '192.168.1.200';
	$user = "myuser";
	$password = "mypassword";
 
	//$powercli_query = 'Get-VM | Select @{N=\'Name\';E={\$_.Name}},  @{N=\'UUID\';E={\$_.Config.Uuid}}   ';
	$powercli_query = 'Get-vm "XPTO-VM-MYMV" | %{\$m=\$_; \$v=Get-View \$_; \$h=Get-HardDisk \$_; \$t=Get-TagAssignment \$_; [pscustomobject] @{name=\$m.name;HostName=\$v.Guest.HostName;   Uuid=\$v.Config.Uuid; VMid=\$v.MoRef.Value;GuestId=\$v.Config.GuestId;CreateDate=\$v.Config.CreateDate;MemoryGB=\$h.Parent.MemoryGB;Numcpu=\$h.Parent.Numcpu;CapacityGB=\$h.CapacityGB;TagAssignment=(\$t | Select-object Tag -ExpandProperty Tag| select-object Category,Name,Id);Net=[pscustomobject] @{Network=\$v.Guest.Net.Network; MacAddress=\$v.Guest.Net.MacAddress; IpAddress=(\$v.Guest.Net.IpConfig.IpAddress | foreach-object {[pscustomobject] @{IpAddress=\$_.IpAddress;PrefixLength=\$_.PrefixLength }}); Connected=\$v.Guest.Net.Connected;}}}';
 
	$PowerCliCommand='export HOME=/tmp/ &amp;&amp; pwsh -c "&amp; {Import-Module VMware.VimAutomation.Core; \$teste=Connect-VIServer -Server (\"$vSphereIP\", \"$vSphereIP\") -User '.$user.' -Password \"'.$password.'\"; '.$powercli_query.'| ConvertTo-Json  -Depth 4} "';
	exec($PowerCliCommand, $Output, $ErrorReturned);
 
	header('Content-Type: application/json');
	echo(implode ( ' ' , $Output ));
}
?&gt;
20 jul

HyperV PowerShell Rest Service

ipmo 'virtualmachinemanager\virtualmachinemanager.psd1'
 
# Create a listener on port 8000
$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add('http://+:8080/') 
$listener.Start()
Get-VMMServer vmm.redemapa.agro
'Listening ...'
 
# Run until you send a GET request to /end
while ($true) {
    $context = $listener.GetContext() 
    # Capture the details about the request
    $request = $context.Request
    # Setup a place to deliver a response
    $response = $context.Response
    # Break from loop if GET request sent to /end
    if ($request.Url -match '/end') { 
        break 
    } else {
        # Split request URL to get command and options
        $requestvars = ([String]$request.Url).split("/");        
        switch($requestvars[3])
        {
            "propriedadesCustomizadasGeral" 
            {
                # Get the class name and server name from the URL and run get-WMIObject
                $result = &amp; {
                    foreach ($propriedade in $(Get-SCCustomProperty | Where-Object -Property Name -notlike "Custom*"  | Where-Object -Property Name -ne "SupportedVmGenerationForVmRole"))
                    {
                        foreach ($objeto in $(Get-VM))
                        {
                            $temp = Get-SCCustomPropertyValue -InputObject $objeto -CustomProperty $propriedade;
                            If ($temp.Name -ne $null)
                            {
                                [pscustomobject] @{
                                    Property = $temp.Name
                                    Value = $temp.Value
                                }
                            }
                        }
                    }
                }
                # Convert the returned data to JSON and set the HTTP content type to JSON
                $message = $result | ConvertTo-Json; 
                $response.ContentType = 'application/json';
            }
            "propriedadesCustomizadasVM"
            {
                $result =  &amp;{foreach ($propriedade in $(Get-SCCustomProperty | Where-Object -Property Name -notlike "Custom*"  | Where-Object -Property Name -ne "SupportedVmGenerationForVmRole"))
                {
                    $temp = Get-SCCustomPropertyValue -InputObject (Get-VM $requestvars[4])[0] -CustomProperty $propriedade;
                    If ($temp.Name -ne $null)
                    {
                        [pscustomobject] @{
                            Property = $temp.Name
                            Value = $temp.Value
                        }
                    }
                 } }
                 $message = $result | ConvertTo-Json; 
                 $response.ContentType = 'application/json';
            }
            "VM"
            {
                $result =  &amp;{get-vm $requestvars[4]}
                $message = $result | ConvertTo-Json; 
                $response.ContentType = 'application/json';
            }
            "VMs"
            {
                $result =  &amp;{get-vm | select-object name,BiosGuid, vmid ,hostname, ComputerName,StatusString, @{Name="IPv4Addresses"; Expression={ $_.VirtualNetworkAdapters.IPv4Addresses}}}
                $message = $result | ConvertTo-Json; 
                $response.ContentType = 'application/json';
            }
            default
            {
                # If no matching subdirectory/route is found generate a 404 message
                $message = "This is not the page you're looking for.";
                $response.ContentType = 'text/html' ;
            }
        }
       # Convert the data to UTF8 bytes
       [byte[]]$buffer = [System.Text.Encoding]::UTF8.GetBytes($message)
 
       # Set length of response
       $response.ContentLength64 = $buffer.length
 
       # Write response out and close
       $output = $response.OutputStream
       $output.Write($buffer, 0, $buffer.length)
       $output.Close()
   }    
}
 
#Terminate the listener
$listener.Stop()