vcpkg/scripts/azure-pipelines/osx/Utilities.psm1
nicole mazzuca f0ae3efbb4
[vcpkg-ci] fix macos setup scripts (#12639)
* [vcpkg-ci] fix macos setup scripts

* the disk feature is still experimental

* fix Get-InstalledVirtualBoxExtensionPacks

* use new bash install script for brew

instead of old-style ruby
2020-07-31 11:52:24 -07:00

152 lines
3.3 KiB
PowerShell

#Requires -Version 6.0
Set-StrictMode -Version 2
<#
.SYNOPSIS
Returns whether the specified command exists in the current environment.
.DESCRIPTION
Get-CommandExists takes a string as a parameter,
and returns whether it exists in the current environment;
either a function, alias, or an executable in the path.
It's somewhat equivalent to `which`.
.PARAMETER Name
Specifies the name of the command which may or may not exist.
.INPUTS
System.String
The name of the command.
.OUTPUTS
System.Boolean
Whether the command exists.
#>
function Get-CommandExists
{
[CmdletBinding()]
[OutputType([Boolean])]
Param(
[Parameter(ValueFromPipeline)]
[String]$Name
)
$null -ne (Get-Command -Name $Name -ErrorAction SilentlyContinue)
}
<#
.SYNOPSIS
Downloads a file and checks its hash.
.DESCRIPTION
Get-RemoteFile takes a URI and a hash,
downloads the file at that URI to OutFile,
and checks that the hash of the downloaded file.
It then returns a FileInfo object corresponding to the downloaded file.
.PARAMETER OutFile
Specifies the file path to download to.
.PARAMETER Uri
The URI to download from.
.PARAMETER Sha256
The expected SHA256 of the downloaded file.
.INPUTS
None
.OUTPUTS
System.IO.FileInfo
The FileInfo for the downloaded file.
#>
function Get-RemoteFile
{
[CmdletBinding(PositionalBinding=$False)]
[OutputType([System.IO.FileInfo])]
Param(
[Parameter(Mandatory=$True)]
[String]$OutFile,
[Parameter(Mandatory=$True)]
[String]$Uri,
[Parameter(Mandatory=$True)]
[String]$Sha256
)
Invoke-WebRequest -OutFile $OutFile -Uri $Uri
$actualHash = Get-FileHash -Algorithm SHA256 -Path $OutFile
if ($actualHash.Hash -ne $Sha256) {
throw @"
Invalid hash for file $OutFile;
expected: $Hash
found: $($actualHash.Hash)
Please make sure that the hash in the powershell file is correct.
"@
}
Get-Item $OutFile
}
<#
.SYNOPSIS
Gets the list of installed extensions as powershell objects.
.DESCRIPTION
Get-InstalledVirtualBoxExtensionPacks gets the installed extensions,
returning objects that look like:
{
Pack = 'Oracle VM VirtualBox Extension Pack';
Version = '6.1.10';
...
}
.INPUTS
None
.OUTPUTS
PSCustomObject
The list of VBox Extension objects that are installed.
#>
function Get-InstalledVirtualBoxExtensionPacks
{
[CmdletBinding()]
[OutputType([PSCustomObject])]
Param()
$lines = VBoxManage list extpacks
$result = @()
$currentObject = $null
$currentKey = ""
$currentString = ""
$lines | ForEach-Object {
$Line = $_
if ($Line[0] -eq ' ') {
$currentString += "`n$($Line.Trim())"
} else {
if ($null -ne $currentObject) {
$currentObject.$currentKey = $currentString
}
$currentKey, $currentString = $Line -Split ':'
$currentString = $currentString.Trim()
if ($currentKey.StartsWith('Pack no')) {
$currentKey = 'Pack'
if ($null -ne $currentObject) {
Write-Output ([PSCustomObject]$currentObject)
}
$currentObject = @{}
}
}
}
if ($null -ne $currentObject) {
$currentObject.$currentKey = $currentString
Write-Output ([PSCustomObject]$currentObject)
}
}