pentest-distro-builder/filesystem/etc/skel/.vscode/extensions/ms-vscode.powershell-1.8.4/dockerInstall.psm1

115 lines
3.6 KiB
PowerShell
Raw Normal View History

2018-10-17 14:11:16 -06:00
function Install-ChocolateyPackage
{
param(
[Parameter(Mandatory=$true)]
[string]
$PackageName,
[Parameter(Mandatory=$false)]
[string]
$Executable,
[string[]]
$ArgumentList,
[switch]
$Cleanup,
[int]
$ExecutionTimeout = 2700,
[string]
$Version
)
if(-not(Get-Command -name Choco -ErrorAction SilentlyContinue))
{
Write-Verbose "Installing Chocolatey provider..." -Verbose
Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression
}
Write-Verbose "Installing $PackageName..." -Verbose
$extraCommand = @()
if($Version)
{
$extraCommand += '--version', $version
}
choco install -y $PackageName --no-progress --execution-timeout=$ExecutionTimeout $ArgumentList $extraCommands
if($executable)
{
Write-Verbose "Verifing $Executable is in path..." -Verbose
$exeSource = $null
$exeSource = Get-ChildItem -path "$env:ProgramFiles\$Executable" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
if(!$exeSource)
{
Write-Verbose "Falling back to x86 program files..." -Verbose
$exeSource = Get-ChildItem -path "${env:ProgramFiles(x86)}\$Executable" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
}
# Don't search the chocolatey program data until more official locations have been searched
if(!$exeSource)
{
Write-Verbose "Falling back to chocolatey..." -Verbose
$exeSource = Get-ChildItem -path "$env:ProgramData\chocolatey\$Executable" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
}
# all obvious locations are exhausted, use brute force and search from the root of the filesystem
if(!$exeSource)
{
Write-Verbose "Falling back to the root of the drive..." -Verbose
$exeSource = Get-ChildItem -path "/$Executable" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
}
if(!$exeSource)
{
throw "$Executable not found"
}
$exePath = Split-Path -Path $exeSource
Add-Path -path $exePath
}
if($Cleanup.IsPresent)
{
Remove-Folder -Folder "$env:temp\chocolatey"
}
}
function Add-Path
{
param
(
$path
)
$machinePathString = [System.Environment]::GetEnvironmentVariable('path',[System.EnvironmentVariableTarget]::Machine)
$machinePath = $machinePathString -split ';'
if($machinePath -inotcontains $path)
{
$newPath = "$machinePathString;$path"
Write-Verbose "Adding $path to path..." -Verbose
[System.Environment]::SetEnvironmentVariable('path',$newPath,[System.EnvironmentVariableTarget]::Machine)
Write-Verbose "Added $path to path." -Verbose
$env:Path += ";$newPath"
}
else
{
Write-Verbose "$path already in path." -Verbose
}
}
function Remove-Folder
{
param(
[string]
$Folder
)
Write-Verbose "Cleaning up $Folder..." -Verbose
$filter = Join-Path -Path $Folder -ChildPath *
[int]$measuredCleanupMB = (Get-ChildItem $filter -Recurse | Measure-Object -Property Length -Sum).Sum / 1MB
Remove-Item -recurse -force $filter -ErrorAction SilentlyContinue
Write-Verbose "Cleaned up $measuredCleanupMB MB from $Folder" -Verbose
}