Functions/packages-service/Import-vROPackage.psm1
function Import-vROPackage { <# .SYNOPSIS Imports a vRO Package .DESCRIPTION Imports a vRO Package .PARAMETER File The action file .PARAMETER Overwrite Overwrite an existing Package .PARAMETER ImportConfigurationAttributeValues Import Configuration Attribute Values .PARAMETER TagImportMode Tag Import Mode .INPUTS System.String System.IO.FileInfo Switch .OUTPUTS None .EXAMPLE Import-vROPackage -File C:\Packages\net.powervro.tests.package -Overwrite .EXAMPLE Get-ChildItem -Path C:\Packages\net.powervro.tests.package | Import-vROPackage -Confirm:$false #> [CmdletBinding(SupportsShouldProcess,ConfirmImpact="High")][OutputType('System.Management.Automation.PSObject')] Param ( [parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelinebyPropertyName=$true)] [ValidateNotNullOrEmpty()] [String[]]$File, [parameter(Mandatory=$false)] [Switch]$Overwrite, [parameter(Mandatory=$false)] [Switch]$ImportConfigurationAttributeValues, [parameter(Mandatory=$false)] [ValidateSet("Dont","ImportOverwrite","ImportPreserve")] [String]$TagImportMode = "Dont" ) begin { # --- Set Set Line Feed $LF = "`r`n" # --- Set options if ($PSBoundParameters.ContainsKey("Overwrite")) { $OverwriteParam = 'true' } else { $OverwriteParam = 'false' } if ($PSBoundParameters.ContainsKey("ImportConfigurationAttributeValues")) { $ImportConfigurationAttributeValuesParam = 'true' } else { $ImportConfigurationAttributeValuesParam = 'false' } switch ($TagImportMode){ “Dont” { $TagImportModeParam = 'DoNotImport'; break } “ImportOverwrite” { $TagImportModeParam = 'ImportAndOverwriteExistingValue'; break } “ImportPreserve” { $TagImportModeParam = 'ImportButPreserveExistingValue'; break } } } process { foreach ($FilePath in $File){ try { # --- Resolve the file path $FileInfo = [System.IO.FileInfo](Resolve-Path $FilePath).Path # --- Create the multi-part form $Boundary = [guid]::NewGuid().ToString() $FileBin = [System.IO.File]::ReadAllBytes($FileInfo.FullName) $Encoding = [System.Text.Encoding]::GetEncoding("iso-8859-1") $EncodedFile = $Encoding.GetString($FileBin) $Form = ( "--$($Boundary)", "Content-Disposition: form-data; name=`"file`"; filename=`"$($FileInfo.Name)`"", "Content-Type:application/octet-stream$($LF)", $EncodedFile, "--$($Boundary)--$($LF)" ) -join $LF $URI = "/vco/api/packages?overwrite=$($OverwriteParam)&importConfigurationAttributeValues=$($ImportConfigurationAttributeValuesParam)&tagImportMode=$($TagImportModeParam)" # --- Set custom headers for the request $Headers = @{ "Authorization" = "Basic $($Global:vROConnection.EncodedPassword)"; "Accept" = "Application/json" "Accept-Encoding" = "gzip,deflate,sdch"; "Content-Type" = "multipart/form-data; boundary=$($Boundary)" } if ($PSCmdlet.ShouldProcess($FileInfo.FullName)){ # --- Run vRO REST Request Write-Verbose -Message "POST : $($URI)" Invoke-vRORestMethod -Method POST -Uri $URI -Body $Form -Headers $Headers -Verbose:$VerbosePreference Write-Verbose -Message "SUCCESS" # --- Output the result Get-vROPackage -Name $FileInfo.BaseName } } catch [Exception]{ throw } } } end { } } |