Public/Import-aloslayer.ps1
function Import-ALOsLayer { <# .SYNOPSIS Creates a new operating system layer .DESCRIPTION Creates a new operating system layer .PARAMETER websession Existing Webrequest session for CAL Appliance .PARAMETER vmname Virtual machine name to import from .PARAMETER description Description of the layer .PARAMETER connectorid ID of Connector to use .PARAMETER icon Icon ID (default 196608) .PARAMETER name Name of the layer .PARAMETER shareid ID of file share .PARAMETER size Size of layer in GB (default 61440) .PARAMETER version Version number of the layer .PARAMETER vmid Virtual Machine ID from vCenter .EXAMPLE $fileshare = Get-ALRemoteshare -websession $websession $connector = Get-ALconnector -websession $websession -type Create $shares = get-alremoteshare -websession $websession #vCenter Command $vm = Get-VM "Windows2016VM" $vmid = $vm.Id -replace "VirtualMachine-","" $response = import-aloslayer -websession $websession -vmname $vm.name -connectorid $connector.id -shareid $fileshare.id -name "Windows 2016" -version "1.0" -vmid $vmid #> [cmdletbinding(SupportsShouldProcess = $true, ConfirmImpact='High')] Param( [Parameter(Mandatory=$true)]$websession, [Parameter(Mandatory=$true)]$vmname, [Parameter(Mandatory=$false)]$description="", [Parameter(Mandatory=$true)]$connectorid, [Parameter(Mandatory=$true)]$shareid, [Parameter(Mandatory=$false)]$icon="196608", [Parameter(Mandatory=$true)]$name, [Parameter(Mandatory=$false)]$size="61440", [Parameter(Mandatory=$true)]$version, [Parameter(Mandatory=$true)]$vmid ) Begin { Write-Verbose "BEGIN: $($MyInvocation.MyCommand)" Test-ALWebsession -WebSession $websession } Process { [xml]$xml = @" <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ImportOs xmlns="http://www.unidesk.com/"> <command> <SelectedFileShare>$shareid</SelectedFileShare> <PlatformConnectorConfigId>$connectorid</PlatformConnectorConfigId> <PlatformAuditInfo>OS Machine Name: $vmname</PlatformAuditInfo> <PlatformData>{"VmId":{"attributes":{"type":"VirtualMachine"},"`$value":"$vmid"},"VmName":"$vmname"}</PlatformData> <LayerInfo> <Name>$name</Name> <Description>$description</Description> <IconId>$icon</IconId> </LayerInfo> <RevisionInfo> <Name>$version</Name> <Description/> <LayerSizeMiB>$size</LayerSizeMiB> </RevisionInfo> <Reason> <ReferenceNumber>0</ReferenceNumber> </Reason> </command> </ImportOs> </s:Body> </s:Envelope> "@ $headers = @{ SOAPAction = "http://www.unidesk.com/ImportOs"; "Content-Type" = "text/xml; charset=utf-8"; UNIDESK_TOKEN = $websession.token; } $url = "https://" + $websession.aplip + "/Unidesk.Web/API.asmx" if ($PSCmdlet.ShouldProcess("Importing $vmname as $name")) { $return = Invoke-WebRequest -Uri $url -Method Post -Body $xml -Headers $headers -WebSession $websession [xml]$obj = $return.Content if($obj.Envelope.Body.CreateImportOs.CreateImportOs.Error) { throw $obj.Envelope.Body.CreateImportOs.CreateImportOs.Error.message } else { Write-Verbose "WORKTICKET: $($obj.Envelope.Body.CreateImportOs.CreateImportOs.WorkTicketId)" return $obj.Envelope.Body.CreateImportOs.CreateImportOs.WorkTicketId } } } end{Write-Verbose "END: $($MyInvocation.MyCommand)"} } |