-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #9 from AdmiringWorm/AdmiringWorm/issue5
- Loading branch information
Showing
14 changed files
with
764 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
# CHANGELOG | ||
|
||
## 1.3.6 | ||
|
||
- Bugfix: Expand all aliases used in helper scripts ([#8](https://github.com/chocolatey-community/chocolatey-extensions/issues/8)) | ||
|
||
## 1.3.5 | ||
|
||
- Bugfix `Remove-Process`: Fixed Powershell v2 compatibility issue | ||
|
||
## 1.3.4 | ||
|
||
- Added `Remove-Process` function to ensure that process is stopped in reliable way | ||
|
||
## 1.3.3 | ||
|
||
- Bugfix `Get-AppInstallLocation`: fix path is directory | ||
|
||
## 1.3.2 | ||
|
||
- Bugfix `Get-AppInstallLocation`: now checks if path is directory | ||
|
||
## 1.3.1 | ||
- Bugfix in `Get-AppInstallLocation`: Removed extra `$location` parameter from Split-Path when parsing the registry UninstallString. | ||
|
||
## 1.3.0 | ||
|
||
- `Get-EffectiveProxy`: Get the current proxy using several methods | ||
|
||
## 1.2.0 | ||
|
||
- Use `$IgnoredArguments` in all functions to allow for future expansion and splatting ([#621](https://github.com/chocolatey/chocolatey-coreteampackages/issues/621)) | ||
- Bugfix in `Get-PackageParameters` parsing of paths containing symbol chars. | ||
|
||
## 1.1.0 | ||
- `Get-AvailableDriveLetter`: Get the next unused drive letter | ||
|
||
## 1.0.7 | ||
- Bugfix in `Get-PackageParameters`: flags can now have numbers in their names, whereas before, everything past the number would be truncated and the flag would turn into a boolean. | ||
|
||
## 1.0.6 | ||
- Bugfix in `Get-AppInstallLocation`: Powershell 2 can not replace on null value. | ||
|
||
## 1.0.5 | ||
|
||
- Bugfix in `Get-UninstallRegistryKey`: Powershell 2 compatibility. | ||
- Slightly improved documentation of `Get-UninstallRegistryKey`. | ||
|
||
## 1.0.4 | ||
|
||
- Bugfix in `Get-PackageParameters`: Powershell 2 bug workaround ([#465](https://github.com/chocolatey/chocolatey-coreteampackages/issues/465)). | ||
|
||
## 1.0.3 | ||
|
||
- Bugfix in `Get-PackageParameters`: error when parsing of path. | ||
|
||
## 1.0.2 | ||
|
||
- Bugfix in `Get-PackageParameters`: PowerShell 2 compatibility. | ||
|
||
## 1.0.1 | ||
|
||
- Bugfix in `Get-PackageParameters`: unaliased `sls` to work on PowerShell 2. | ||
|
||
## 1.0 | ||
|
||
- Merged `mm-choco.extension`. | ||
- Merged `chocolatey-uninstall.extension`. | ||
- Added `Get-PackageCacheLocation` | ||
- Added `CHANGELOG.md` and `README.md`. | ||
- Refactoring and more documentation. | ||
|
||
## 0.1.3 | ||
|
||
- `Get-WebContent`: Download file with choco internals. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
# chocolatey-core.extension | ||
|
||
This is the Powershell module that extends Chocolatey with new functions. | ||
|
||
## Installation | ||
|
||
Install via chocolatey: `choco install chocolatey-core.extension`. | ||
|
||
The module is usually automatically installed as a dependency. | ||
|
||
## Usage | ||
|
||
To create a package that uses an extension function add the following to the `nuspec` specification: | ||
|
||
<dependencies> | ||
<dependency id="chocolatey-core.extension" version="SPECIFY_LATEST_VERSION" /> | ||
</dependencies> | ||
|
||
**NOTE**: Make sure you use adequate _minimum_ version. | ||
|
||
To test the functions you can import the module directly or via the `chocolateyInstaller.psm1` module: | ||
|
||
PS> import-module $Env:ChocolateyInstall\helpers\chocolateyInstaller.psm1 | ||
PS> import-module $Env:ChocolateyInstall\extensions\chocolatey-core\*.psm1 | ||
|
||
You can now test any of the functions: | ||
|
||
PS> Get-AppInstallLocation choco -Verbose | ||
|
||
VERBOSE: Trying local and machine (x32 & x64) Uninstall keys | ||
VERBOSE: Trying Program Files with 2 levels depth | ||
VERBOSE: Trying PATH | ||
C:\ProgramData\chocolatey\bin | ||
|
||
Keep in mind that function may work only in the context of the `chocolateyInstaller.ps1`. | ||
|
||
To get the list of functions, load the module directly and invoke the following command: | ||
|
||
Get-Command -Module chocolatey-core | ||
|
||
To get the help for the specific function use `man`: | ||
|
||
man Get-UninstallRegistryKey | ||
|
||
|
||
## Notes | ||
|
||
- There is [a known bug](https://github.com/chocolatey-community/chocolatey-coreteampackages/issues/784) in the function `Get-AppInstallLocation` with parameter `$AppNamePattern` which is internally used both as wildcard and regex patterns. This usually doesn't create any problems, but may do so if application contains regex symbols in the name, such as [notepad++](https://github.com/chocolatey-community/chocolatey-coreteampackages/issues/1198). | ||
|
||
|
29 changes: 29 additions & 0 deletions
29
src/chocolatey-core.extension/chocolatey-core.extension.nuspec
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<!-- Do not remove this test for UTF-8: if “Ω” doesn’t appear as greek uppercase omega letter enclosed in quotation marks, you should use an editor that supports UTF-8, not this one. --> | ||
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd"> | ||
<metadata> | ||
<id>chocolatey-core.extension</id> | ||
<version>1.3.6</version> | ||
<title>Chocolatey Core Extensions</title> | ||
<summary>Helper functions extending core choco functionality</summary> | ||
<authors>chocolatey</authors> | ||
<owners>chocolatey-community</owners> | ||
<description> | ||
This package provides helper functions installed as a Chocolatey extension. | ||
These functions may be used in Chocolatey install/uninstall scripts by declaring this package a dependency in your package's nuspec. | ||
</description> | ||
<tags>chocolatey core extension admin</tags> | ||
<projectUrl>https://github.com/chocolatey-community/chocolatey-extensions</projectUrl> | ||
<!--<iconUrl>http://cdn.rawgit.com/chocolatey-coreteampackages/master/icons/chocolatey-common.extension.png</iconUrl>--> | ||
<copyright>© 2016 Chocolatey Core Team Package Contributors</copyright> | ||
<licenseUrl>https://github.com/chocolatey-community/chocolatey-extensions/blob/master/LICENSE.md</licenseUrl> | ||
<requireLicenseAcceptance>false</requireLicenseAcceptance> | ||
<projectSourceUrl>https://github.com/chocolatey-community/chocolatey-extensions/tree/master/src/chocolatey-core.extension</projectSourceUrl> | ||
<docsUrl>https://github.com/chocolatey-community/chocolatey-extensions/blob/master/src/chocolatey-core.extension/README.md</docsUrl> | ||
<bugTrackerUrl>https://github.com/chocolatey-community/chocolatey-extensions/issues</bugTrackerUrl> | ||
<releaseNotes>https://github.com/chocolatey-community/chocolatey-extensions/blob/master/src/chocolatey-core.extension/CHANGELOG.md</releaseNotes> | ||
</metadata> | ||
<files> | ||
<file src="extensions\**" target="extensions" /> | ||
</files> | ||
</package> |
76 changes: 76 additions & 0 deletions
76
src/chocolatey-core.extension/extensions/Get-AppInstallLocation.ps1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
<# | ||
.SYNOPSIS | ||
Get application install location | ||
.DESCRIPTION | ||
Function tries to find install location in multiple places. It returns $null if all fail. The following | ||
locations are tried: | ||
- local and machine (x32 & x64) various Uninstall keys | ||
- x32 & x64 Program Files up to the 2nd level of depth | ||
- native commands available via PATH | ||
- locale and machine registry key SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths | ||
Use Verbose parameter to see which of the above locations was used for the result, if any. | ||
.EXAMPLE | ||
PS> Get-AppInstallLocation choco | ||
Returns the install location of the application 'choco'. | ||
.OUTPUTS | ||
[String] or $null | ||
#> | ||
function Get-AppInstallLocation { | ||
[CmdletBinding()] | ||
param( | ||
# Regular expression pattern | ||
[ValidateNotNullOrEmpty()] | ||
[string] $AppNamePattern, | ||
|
||
# Allows splatting with arguments that do not apply and future expansion. Do not use directly. | ||
[parameter(ValueFromRemainingArguments = $true)] | ||
[Object[]] $IgnoredArguments | ||
) | ||
|
||
function strip($path) { if ($path.EndsWith('\')) { return $path -replace '.$' } else { $path } } | ||
|
||
function is_dir( $path ) { $path -and (Get-Item $path -ea 0).PsIsContainer -eq $true } | ||
|
||
$ErrorActionPreference = "SilentlyContinue" | ||
|
||
Write-Verbose "Trying local and machine (x32 & x64) Uninstall keys" | ||
[array] $key = Get-UninstallRegistryKey $AppNamePattern | ||
if ($key.Count -eq 1) { | ||
Write-Verbose "Trying Uninstall key property 'InstallLocation'" | ||
$location = $key.InstallLocation | ||
if (is_dir $location) { return strip $location } | ||
|
||
Write-Verbose "Trying Uninstall key property 'UninstallString'" | ||
$location = $key.UninstallString | ||
if ($location) { $location = $location.Replace('"', '') | Split-Path } | ||
if (is_dir $location) { return strip $location } | ||
|
||
Write-Verbose "Trying Uninstall key property 'DisplayIcon'" | ||
$location = $key.DisplayIcon | ||
if ($location) { $location = Split-Path $location } | ||
if (is_dir $location) { return strip $location } | ||
} else { Write-Verbose "Found $($key.Count) keys, aborting this method" } | ||
|
||
$dirs = $Env:ProgramFiles, "$Env:ProgramFiles\*\*" | ||
if (Get-OSArchitectureWidth 64) { $dirs += ${ENV:ProgramFiles(x86)}, "${ENV:ProgramFiles(x86)}\*\*" } | ||
Write-Verbose "Trying Program Files with 2 levels depth: $dirs" | ||
$location = (Get-ChildItem $dirs | Where-Object {$_.PsIsContainer}) -match $AppNamePattern | Select-Object -First 1 | ForEach-Object {$_.FullName} | ||
if (is_dir $location) { return strip $location } | ||
|
||
Write-Verbose "Trying native commands on PATH" | ||
$location = (Get-Command -CommandType Application) -match $AppNamePattern | Select-Object -First 1 | ForEach-Object { Split-Path $_.Source } | ||
if (is_dir $location) { return strip $location } | ||
|
||
$appPaths = "\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths" | ||
Write-Verbose "Trying Registry: $appPaths" | ||
$location = (Get-ChildItem "HKCU:\$appPaths", "HKLM:\$appPaths") -match $AppNamePattern | Select-Object -First 1 | ||
if ($location) { $location = Split-Path $location } | ||
if (is_dir $location) { return strip $location } | ||
|
||
Write-Verbose "No location found" | ||
} |
50 changes: 50 additions & 0 deletions
50
src/chocolatey-core.extension/extensions/Get-AvailableDriveLetter.ps1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
<# | ||
.SYNOPSIS | ||
Get a 'free' drive letter | ||
.DESCRIPTION | ||
Get a not yet in-use drive letter that can be used for mounting | ||
.EXAMPLE | ||
Get-AvailableDriveLetter | ||
.EXAMPLE | ||
Get-AvailableDriveLetter 'X' | ||
(do not return X, even if it'd be the next choice) | ||
.INPUTS | ||
specific drive letter(s) that will be excluded as potential candidates | ||
.OUTPUTS | ||
System.String (single drive-letter character) | ||
.LINK | ||
http://stackoverflow.com/questions/12488030/getting-a-free-drive-letter/29373301#29373301 | ||
#> | ||
function Get-AvailableDriveLetter { | ||
param ( | ||
[char[]]$ExcludedLetters, | ||
|
||
# Allows splatting with arguments that do not apply and future expansion. Do not use directly. | ||
[parameter(ValueFromRemainingArguments = $true)] | ||
[Object[]] $IgnoredArguments | ||
) | ||
|
||
$Letter = [int][char]'C' | ||
$i = @() | ||
|
||
#getting all the used Drive letters reported by the Operating System | ||
$(Get-PSDrive -PSProvider filesystem) | ForEach-Object{$i += $_.name} | ||
|
||
#Adding the excluded letter | ||
$i+=$ExcludedLetters | ||
|
||
while($i -contains $([char]$Letter)){$Letter++} | ||
|
||
if ($Letter -gt [char]'Z') { | ||
throw "error: no drive letter available!" | ||
} | ||
Write-Verbose "available drive letter: '$([char]$Letter)'" | ||
Return $([char]$Letter) | ||
} | ||
|
66 changes: 66 additions & 0 deletions
66
src/chocolatey-core.extension/extensions/Get-EffectiveProxy.ps1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
<# | ||
.SYNOPSIS | ||
Get the current proxy using several methods | ||
.DESCRIPTION | ||
Function tries to find the current proxy using several methods, in the given order: | ||
- $env:chocolateyProxyLocation variable | ||
- $env:http_proxy environment variable | ||
- IE proxy | ||
- Chocolatey config | ||
- Winhttp proxy | ||
- WebClient proxy | ||
Use Verbose parameter to see which of the above locations was used for the result, if any. | ||
The function currently doesn't handle the proxy username and password. | ||
.OUTPUTS | ||
[String] in the form of http://<proxy>:<port> | ||
#> | ||
function Get-EffectiveProxy(){ | ||
|
||
# Try chocolatey proxy environment vars | ||
if ($env:chocolateyProxyLocation) { | ||
Write-Verbose "Using `$Env:chocolateyProxyLocation" | ||
return $env:chocolateyProxyLocation | ||
} | ||
|
||
# Try standard Linux variable | ||
if ($env:http_proxy) { | ||
Write-Verbose "Using `$Env:http_proxy" | ||
return $env:http_proxy | ||
} | ||
|
||
# Try to get IE proxy | ||
$key = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | ||
$r = Get-ItemProperty $key | ||
if ($r.ProxyEnable -and $r.ProxyServer) { | ||
Write-Verbose "Using IE proxy settings" | ||
return "http://" + $r.ProxyServer | ||
} | ||
|
||
# Try chocolatey config file | ||
[xml] $cfg = Get-Content $env:ChocolateyInstall\config\chocolatey.config | ||
$p = $cfg.chocolatey.config | ForEach-Object { $_.add } | Where-Object { $_.key -eq 'proxy' } | Select-Object -Expand value | ||
if ($p) { | ||
Write-Verbose "Using choco config proxy" | ||
return $p | ||
} | ||
|
||
# Try winhttp proxy | ||
(netsh.exe winhttp show proxy) -match 'Proxy Server\(s\)' | Set-Variable proxy | ||
$proxy = $proxy -split ' :' | Select-Object -Last 1 | ||
$proxy = $proxy.Trim() | ||
if ($proxy) { | ||
Write-Verbose "Using winhttp proxy server" | ||
return "http://" + $proxy | ||
} | ||
|
||
# Try using WebClient | ||
$url = "http://chocolatey.org" | ||
$client = New-Object System.Net.WebClient | ||
if ($client.Proxy.IsBypassed($url)) { return $null } | ||
|
||
Write-Verbose "Using WebClient proxy" | ||
return "http://" + $client.Proxy.GetProxy($url).Authority | ||
} |
40 changes: 40 additions & 0 deletions
40
src/chocolatey-core.extension/extensions/Get-PackageCacheLocation.ps1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
<# | ||
.SYNOPSIS | ||
Get temporary location for the package based on its name and version. | ||
.DESCRIPTION | ||
The function returns package cache directory within $Env:TEMP. It will not create the directory | ||
if it doesn't exist. | ||
This function is useful when you have to obtain the file using `Get-ChocolateyWebFile` in order | ||
to perform certain installation steps that other helpers can't do. | ||
.EXAMPLE | ||
Get-PackageCacheLocation | ||
.OUTPUTS | ||
[String] | ||
.LINKS | ||
Get-ChocolateyWebFile | ||
#> | ||
function Get-PackageCacheLocation { | ||
[CmdletBinding()] | ||
param ( | ||
# Name of the package, by default $Env:ChocolateyPackageName | ||
[string] $Name = $Env:ChocolateyPackageName, | ||
# Version of the package, by default $Env:ChocolateyPackageVersion | ||
[string] $Version = $Env:ChocolateyPackageVersion, | ||
# Allows splatting with arguments that do not apply and future expansion. Do not use directly. | ||
[parameter(ValueFromRemainingArguments = $true)] | ||
[Object[]] $IgnoredArguments | ||
) | ||
|
||
if (!$Name) { Write-Warning 'Environment variable $Env:ChocolateyPackageName is not set' } | ||
$res = Join-Path $Env:TEMP $Name | ||
|
||
if (!$Version) { Write-Warning 'Environment variable $Env:ChocolateyPackageVersion is not set' } | ||
$res = Join-Path $res $Version | ||
|
||
$res | ||
} |
Oops, something went wrong.