mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-28 11:21:12 +08:00
f0ae3efbb4
* [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
152 lines
3.3 KiB
PowerShell
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)
|
|
}
|
|
}
|