added SSCLI 1.0
[windows-sources.git] / choco / install.ps1
blob59ac78b9e9b122a2cdff8a40217cc8ac80e22e04
1 # =====================================================================
2 # Copyright 2011 - Present RealDimensions Software, LLC, and the
3 # original authors/contributors from ChocolateyGallery
4 # at https://github.com/chocolatey/chocolatey.org
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
10 # http://www.apache.org/licenses/LICENSE-2.0
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 # =====================================================================
19 # Environment Variables, specified as $env:NAME in PowerShell.exe and %NAME% in cmd.exe.
20 # For explicit proxy, please set $env:chocolateyProxyLocation and optionally $env:chocolateyProxyUser and $env:chocolateyProxyPassword
21 # For an explicit version of Chocolatey, please set $env:chocolateyVersion = 'versionnumber'
22 # To target a different url for chocolatey.nupkg, please set $env:chocolateyDownloadUrl = 'full url to nupkg file'
23 # NOTE: $env:chocolateyDownloadUrl does not work with $env:chocolateyVersion.
24 # To use 7zip (requires additional download) instead of built-in compression, please set $env:chocolateyUseWindowsCompression = 'false'
25 # To bypass the use of any proxy, please set $env:chocolateyIgnoreProxy = 'true'
27 #specifically use the API to get the latest version (below)
28 $url = ''
30 $chocolateyVersion = $env:chocolateyVersion
31 if (![string]::IsNullOrEmpty($chocolateyVersion)){
32 Write-Output "Downloading specific version of Chocolatey: $chocolateyVersion"
33 $url = "https://chocolatey.org/api/v2/package/chocolatey/$chocolateyVersion"
36 $chocolateyDownloadUrl = $env:chocolateyDownloadUrl
37 if (![string]::IsNullOrEmpty($chocolateyDownloadUrl)){
38 Write-Output "Downloading Chocolatey from : $chocolateyDownloadUrl"
39 $url = "$chocolateyDownloadUrl"
42 if ($env:TEMP -eq $null) {
43 $env:TEMP = Join-Path $env:SystemDrive 'temp'
45 $chocTempDir = Join-Path $env:TEMP "chocolatey"
46 $tempDir = Join-Path $chocTempDir "chocInstall"
47 if (![System.IO.Directory]::Exists($tempDir)) {[System.IO.Directory]::CreateDirectory($tempDir)}
48 $file = Join-Path $tempDir "chocolatey.zip"
50 # PowerShell v2/3 caches the output stream. Then it throws errors due # to the FileStream not being what is expected. Fixes "The OS handle's # position is not what FileStream expected. Do not use a handle # simultaneously in one FileStream and in Win32 code or another # FileStream."
51 function Fix-PowerShellOutputRedirectionBug {
52 $poshMajorVerion = $PSVersionTable.PSVersion.Major
54 if ($poshMajorVerion -lt 4) {
55 try{
56 # http://www.leeholmes.com/blog/2008/07/30/workaround-the-os-handles-position-is-not-what-filestream-expected/ plus comments
57 $bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetField"
58 $objectRef = $host.GetType().GetField("externalHostRef", $bindingFlags).GetValue($host)
59 $bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetProperty"
60 $consoleHost = $objectRef.GetType().GetProperty("Value", $bindingFlags).GetValue($objectRef, @())
61 [void] $consoleHost.GetType().GetProperty("IsStandardOutputRedirected", $bindingFlags).GetValue($consoleHost, @())
62 $bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetField"
63 $field = $consoleHost.GetType().GetField("standardOutputWriter", $bindingFlags)
64 $field.SetValue($consoleHost, [Console]::Out)
65 [void] $consoleHost.GetType().GetProperty("IsStandardErrorRedirected", $bindingFlags).GetValue($consoleHost, @())
66 $field2 = $consoleHost.GetType().GetField("standardErrorWriter", $bindingFlags)
67 $field2.SetValue($consoleHost, [Console]::Error)
68 } catch {
69 Write-Output "Unable to apply redirection fix."
74 Fix-PowerShellOutputRedirectionBug
76 function Get-Downloader {
77 param (
78 [string]$url
81 $downloader = new-object System.Net.WebClient
83 $defaultCreds = [System.Net.CredentialCache]::DefaultCredentials
84 if ($defaultCreds -ne $null) {
85 $downloader.Credentials = $defaultCreds
88 $ignoreProxy = $env:chocolateyIgnoreProxy
89 if ($ignoreProxy -ne $null -and $ignoreProxy -eq 'true') {
90 Write-Debug "Explicitly bypassing proxy due to user environment variable"
91 $downloader.Proxy = [System.Net.GlobalProxySelection]::GetEmptyWebProxy()
92 } else {
93 # check if a proxy is required
94 $explicitProxy = $env:chocolateyProxyLocation
95 $explicitProxyUser = $env:chocolateyProxyUser
96 $explicitProxyPassword = $env:chocolateyProxyPassword
97 if ($explicitProxy -ne $null -and $explicitProxy -ne '') {
98 # explicit proxy
99 $proxy = New-Object System.Net.WebProxy($explicitProxy, $true)
100 if ($explicitProxyPassword -ne $null -and $explicitProxyPassword -ne '') {
101 $passwd = ConvertTo-SecureString $explicitProxyPassword -AsPlainText -Force
102 $proxy.Credentials = New-Object System.Management.Automation.PSCredential ($explicitProxyUser, $passwd)
105 Write-Debug "Using explicit proxy server '$explicitProxy'."
106 $downloader.Proxy = $proxy
108 } elseif (!$downloader.Proxy.IsBypassed($url)) {
109 # system proxy (pass through)
110 $creds = $defaultCreds
111 if ($creds -eq $null) {
112 Write-Debug "Default credentials were null. Attempting backup method"
113 $cred = get-credential
114 $creds = $cred.GetNetworkCredential();
117 $proxyaddress = $downloader.Proxy.GetProxy($url).Authority
118 Write-Debug "Using system proxy server '$proxyaddress'."
119 $proxy = New-Object System.Net.WebProxy($proxyaddress)
120 $proxy.Credentials = $creds
121 $downloader.Proxy = $proxy
125 return $downloader
128 function Download-String {
129 param (
130 [string]$url
132 $downloader = Get-Downloader $url
134 return $downloader.DownloadString($url)
137 function Download-File {
138 param (
139 [string]$url,
140 [string]$file
142 Write-Output "Downloading $url to $file"
143 $downloader = Get-Downloader $url
145 $downloader.DownloadFile($url, $file)
148 if ($url -eq $null -or $url -eq '') {
149 Write-Output "Getting latest version of the Chocolatey package for download."
150 $url = 'https://chocolatey.org/api/v2/Packages()?$filter=((Id%20eq%20%27chocolatey%27)%20and%20(not%20IsPrerelease))%20and%20IsLatestVersion'
151 [xml]$result = Download-String $url
152 $url = $result.feed.entry.content.src
155 # Download the Chocolatey package
156 Download-File $url $file
158 # Determine unzipping method
159 $unzipMethod = 'builtin'
160 $useWindowsCompression = $env:chocolateyUseWindowsCompression
161 if ($useWindowsCompression -ne $null -and $useWindowsCompression -eq 'false') {
162 Write-Output 'Using 7zip to unzip.'
163 $unzipMethod = '7zip'
166 # unzip the package
167 Write-Output "Extracting $file to $tempDir..."
168 if ($unzipMethod -eq '7zip') {
169 # download 7zip
170 Write-Output "Downloading 7-Zip commandline tool first"
171 $7zaExe = Join-Path $tempDir '7za.exe'
172 Download-File 'https://chocolatey.org/7za.exe' "$7zaExe"
173 Start-Process "$7zaExe" -ArgumentList "x -o`"$tempDir`" -y `"$file`"" -Wait -NoNewWindow
174 } else {
175 try {
176 $shellApplication = new-object -com shell.application
177 $zipPackage = $shellApplication.NameSpace($file)
178 $destinationFolder = $shellApplication.NameSpace($tempDir)
179 $destinationFolder.CopyHere($zipPackage.Items(),0x10)
180 } catch {
181 throw "Unable to unzip package using built-in compression. Set `$env:chocolateyUseWindowsCompression = 'false' and call install again to use 7zip to unzip. Error: `n $_"
185 # Call chocolatey install
186 Write-Output "Installing chocolatey on this machine"
187 $toolsFolder = Join-Path $tempDir "tools"
188 $chocInstallPS1 = Join-Path $toolsFolder "chocolateyInstall.ps1"
190 & $chocInstallPS1
192 Write-Output 'Ensuring chocolatey commands are on the path'
193 $chocInstallVariableName = "ChocolateyInstall"
194 $chocoPath = [Environment]::GetEnvironmentVariable($chocInstallVariableName)
195 if ($chocoPath -eq $null -or $chocoPath -eq '') {
196 $chocoPath = 'C:\ProgramData\Chocolatey'
199 $chocoExePath = Join-Path $chocoPath 'bin'
201 if ($($env:Path).ToLower().Contains($($chocoExePath).ToLower()) -eq $false) {
202 $env:Path = [Environment]::GetEnvironmentVariable('Path',[System.EnvironmentVariableTarget]::Machine);
205 Write-Output 'Ensuring chocolatey.nupkg is in the lib folder'
206 $chocoPkgDir = Join-Path $chocoPath 'lib\chocolatey'
207 $nupkg = Join-Path $chocoPkgDir 'chocolatey.nupkg'
208 if (![System.IO.Directory]::Exists($chocoPkgDir)) { [System.IO.Directory]::CreateDirectory($chocoPkgDir); }
209 Copy-Item "$file" "$nupkg" -Force -ErrorAction SilentlyContinue
211 # SIG # Begin signature block
212 # MIINWwYJKoZIhvcNAQcCoIINTDCCDUgCAQExDzANBglghkgBZQMEAgEFADB5Bgor
213 # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
214 # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBTImtQthSv4EIL
215 # 5pnaQl3hubK8yJm5W8uSyH+Rm3qPoKCCCngwggUwMIIEGKADAgECAhAECRgbX9W7
216 # ZnVTQ7VvlVAIMA0GCSqGSIb3DQEBCwUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
217 # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV
218 # BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xMzEwMjIxMjAwMDBa
219 # Fw0yODEwMjIxMjAwMDBaMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
220 # dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lD
221 # ZXJ0IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EwggEiMA0GCSqGSIb3
222 # DQEBAQUAA4IBDwAwggEKAoIBAQD407Mcfw4Rr2d3B9MLMUkZz9D7RZmxOttE9X/l
223 # qJ3bMtdx6nadBS63j/qSQ8Cl+YnUNxnXtqrwnIal2CWsDnkoOn7p0WfTxvspJ8fT
224 # eyOU5JEjlpB3gvmhhCNmElQzUHSxKCa7JGnCwlLyFGeKiUXULaGj6YgsIJWuHEqH
225 # CN8M9eJNYBi+qsSyrnAxZjNxPqxwoqvOf+l8y5Kh5TsxHM/q8grkV7tKtel05iv+
226 # bMt+dDk2DZDv5LVOpKnqagqrhPOsZ061xPeM0SAlI+sIZD5SlsHyDxL0xY4PwaLo
227 # LFH3c7y9hbFig3NBggfkOItqcyDQD2RzPJ6fpjOp/RnfJZPRAgMBAAGjggHNMIIB
228 # yTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK
229 # BggrBgEFBQcDAzB5BggrBgEFBQcBAQRtMGswJAYIKwYBBQUHMAGGGGh0dHA6Ly9v
230 # Y3NwLmRpZ2ljZXJ0LmNvbTBDBggrBgEFBQcwAoY3aHR0cDovL2NhY2VydHMuZGln
231 # aWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNydDCBgQYDVR0fBHow
232 # eDA6oDigNoY0aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJl
233 # ZElEUm9vdENBLmNybDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp
234 # Z2lDZXJ0QXNzdXJlZElEUm9vdENBLmNybDBPBgNVHSAESDBGMDgGCmCGSAGG/WwA
235 # AgQwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAK
236 # BghghkgBhv1sAzAdBgNVHQ4EFgQUWsS5eyoKo6XqcQPAYPkt9mV1DlgwHwYDVR0j
237 # BBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8wDQYJKoZIhvcNAQELBQADggEBAD7s
238 # DVoks/Mi0RXILHwlKXaoHV0cLToaxO8wYdd+C2D9wz0PxK+L/e8q3yBVN7Dh9tGS
239 # dQ9RtG6ljlriXiSBThCk7j9xjmMOE0ut119EefM2FAaK95xGTlz/kLEbBw6RFfu6
240 # r7VRwo0kriTGxycqoSkoGjpxKAI8LpGjwCUR4pwUR6F6aGivm6dcIFzZcbEMj7uo
241 # +MUSaJ/PQMtARKUT8OZkDCUIQjKyNookAv4vcn4c10lFluhZHen6dGRrsutmQ9qz
242 # sIzV6Q3d9gEgzpkxYz0IGhizgZtPxpMQBvwHgfqL2vmCSfdibqFT+hKUGIUukpHq
243 # aGxEMrJmoecYpJpkUe8wggVAMIIEKKADAgECAhAHdGbtomdvOuySF9IwU3EQMA0G
244 # CSqGSIb3DQEBCwUAMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ
245 # bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lDZXJ0
246 # IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EwHhcNMTYwMzI0MDAwMDAw
247 # WhcNMTcwMzI4MTIwMDAwWjB9MQswCQYDVQQGEwJVUzEPMA0GA1UECBMGS2Fuc2Fz
248 # MQ8wDQYDVQQHEwZUb3Bla2ExJTAjBgNVBAoTHFJlYWxEaW1lbnNpb25zIFNvZnR3
249 # YXJlLCBMTEMxJTAjBgNVBAMTHFJlYWxEaW1lbnNpb25zIFNvZnR3YXJlLCBMTEMw
250 # ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC52YS2WKUpBtdkDyJ3G0Qm
251 # 42v+W+yqr7DediVzIeCjHpKNkmmxO8+lS+nniFDjoFGO1JG/G3ZywVRFlM1LKHeP
252 # M1eON6wT0H1gvhxpMzyuC/SRW9wvMtTlvHnjdTLW06Oe9tvGkQkTM8rbzwRDIZ9o
253 # ddT8BxHSOmGelrAN9CwKf60ziw8jKLZnuAuZwSgkX5K7wvOs8viqydlnt7z3Wyim
254 # L+wjue85Mpa7jyjIfnUqssN1qz4nce+e89CxTD2AbWjGwnfTcTgmj3EUSJRQgDRk
255 # J+O/sVzS/V76xajLoPvI4ZlAsMpeK3ptLYqviU3ZaNUzLQWFjuWqc3fhjbWDFF51
256 # AgMBAAGjggHFMIIBwTAfBgNVHSMEGDAWgBRaxLl7KgqjpepxA8Bg+S32ZXUOWDAd
257 # BgNVHQ4EFgQUT0GgvxvwrOqMjXQ8yw7QDagIVJ4wDgYDVR0PAQH/BAQDAgeAMBMG
258 # A1UdJQQMMAoGCCsGAQUFBwMDMHcGA1UdHwRwMG4wNaAzoDGGL2h0dHA6Ly9jcmwz
259 # LmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtY3MtZzEuY3JsMDWgM6Axhi9odHRw
260 # Oi8vY3JsNC5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVkLWNzLWcxLmNybDBMBgNV
261 # HSAERTBDMDcGCWCGSAGG/WwDATAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5k
262 # aWdpY2VydC5jb20vQ1BTMAgGBmeBDAEEATCBhAYIKwYBBQUHAQEEeDB2MCQGCCsG
263 # AQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wTgYIKwYBBQUHMAKGQmh0
264 # dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFNIQTJBc3N1cmVkSURD
265 # b2RlU2lnbmluZ0NBLmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IB
266 # AQAD6K2ldfDx7hOZxW6smYkiV4lxXY4bewxGv/gh2hjWgLiQ/sornz2fHDni/kOf
267 # qhn8/3KvYd4V33QqMqjm/qsRpwjj9NC/Q2BGuTg0ax3e/Z9ZIvcYB4xx8CRbGKse
268 # R9lixgMAJZMCWyGzAC/E3XX+BX3B6y8N5zBIKRY1M7xub+LM7zW9LGMhX3e56J7G
269 # UF7zIzQ7ZkaJzfxFbVvEz2/KNoNGiCmA7Y0biMXpX9730Dbg4Z+B4SUe4k4WPLS/
270 # 3goAq8lVMFtoqShvyvrmYtj2gFjQmH3BzSCSRZrAFbWYDCga57Fq7A4xrF2i67kG
271 # oljzeP+/35wuoOlrggn2EuJ1MYICOTCCAjUCAQEwgYYwcjELMAkGA1UEBhMCVVMx
272 # FTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNv
273 # bTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElEIENvZGUgU2lnbmlu
274 # ZyBDQQIQB3Rm7aJnbzrskhfSMFNxEDANBglghkgBZQMEAgEFAKCBhDAYBgorBgEE
275 # AYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwG
276 # CisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCDZnyOU
277 # C9Dk3O9KFGYAhlugiQgrCrbD5EOW3DbBO3XOADANBgkqhkiG9w0BAQEFAASCAQBT
278 # xFxUBWg4sItMVKpOfo3AzKbyWdGNBv4Fo42fWbQqgFmMaZSTkztClwKuqLpCKVuh
279 # NUbt0XBxp2+17SI2/h8zJKOQ/V98/iObMCq8XlRyOz1HF2vCCrXWdhK5JVQ1Jitt
280 # DZFDeTPgjezAaHcGqclGx2XXA0MVDNaYnZiq7ThaYrqFSlytqkkfZpDCcTOb/b6B
281 # AwG8UO+g2zCSn0pINEjBDYA3Jr6dymOcm+C2MM2tlcXWWEoUtxaA/y9tsqdfHQBO
282 # c+eF4a/xqLTxf2+OS9xO8JEZJ30teqJwkZY3tqwSCvvBUI2vZ6uTxoBA5c+puL93
283 # TJ/FBbTxlw5bsC9j4Qwa
284 # SIG # End signature block