forked from chocolatey-archive/chocolatey
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added support for files located on FTP servers. Added new Get-FtpFile…
….ps1 script modeled after the existing Get-WebFile.ps1.
- Loading branch information
Showing
2 changed files
with
129 additions
and
69 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 |
---|---|---|
@@ -1,70 +1,72 @@ | ||
function Get-ChocolateyWebFile { | ||
<# | ||
.SYNOPSIS | ||
Downloads a file from the internets. | ||
.DESCRIPTION | ||
This will download a file from a url, tracking with a progress bar. | ||
It returns the filepath to the downloaded file when it is complete. | ||
.PARAMETER PackageName | ||
The name of the package we want to download - this is arbitrary, call it whatever you want. | ||
It's recommended you call it the same as your nuget package id. | ||
.PARAMETER FileFullPath | ||
This is the full path of the resulting file name. | ||
.PARAMETER Url | ||
This is the url to download the file from. | ||
.PARAMETER Url64bit | ||
OPTIONAL - If there is an x64 installer to download, please include it here. If not, delete this parameter | ||
.EXAMPLE | ||
Get-ChocolateyWebFile '__NAME__' 'C:\somepath\somename.exe' 'URL' '64BIT_URL_DELETE_IF_NO_64BIT' | ||
.NOTES | ||
This helper reduces the number of lines one would have to write to download a file to 1 line. | ||
There is no error handling built into this method. | ||
.LINK | ||
Install-ChocolateyPackage | ||
#> | ||
param( | ||
[string] $packageName, | ||
[string] $fileFullPath, | ||
[string] $url, | ||
[string] $url64bit = $url | ||
) | ||
Write-Debug "Running 'Get-ChocolateyWebFile' for $packageName with url:`'$url`', fileFullPath:`'$fileFullPath`',and url64bit:`'$url64bit`'"; | ||
|
||
$url32bit = $url; | ||
$processor = Get-WmiObject Win32_Processor | ||
$procCount=(Get-WmiObject Win32_ComputerSystem).NumberofProcessors | ||
if ($procCount -eq '1') { | ||
$is64bit = $processor.AddressWidth -eq 64 | ||
Write-Debug "Processor width is $($processor.AddressWidth)." | ||
} else { | ||
Write-Debug "First processor width is $($processor[0].AddressWidth)." | ||
$is64bit = $processor[0].AddressWidth -eq 64 | ||
} | ||
$systemBit = '32 bit' | ||
if ($is64bit) { | ||
$systemBit = '64 bit'; | ||
$url = $url64bit; | ||
} | ||
|
||
$downloadMessage = "Downloading $packageName ($url) to $fileFullPath" | ||
if ($url32bit -ne $url64bit) {$downloadMessage = "Downloading $packageName $systemBit ($url) to $fileFullPath.";} | ||
Write-Host "$downloadMessage" | ||
#$downloader = new-object System.Net.WebClient | ||
#$downloader.DownloadFile($url, $fileFullPath) | ||
if ($url.StartsWith('http')) { | ||
Get-WebFile $url $fileFullPath | ||
} else { | ||
Write-Debug "We are attempting to copy the local item `'$url`' to `'$fileFullPath`'" | ||
Copy-Item $url -Destination $fileFullPath -Force | ||
} | ||
|
||
Start-Sleep 2 #give it a sec or two to finish up | ||
function Get-ChocolateyWebFile { | ||
<# | ||
.SYNOPSIS | ||
Downloads a file from the internets. | ||
.DESCRIPTION | ||
This will download a file from a url, tracking with a progress bar. | ||
It returns the filepath to the downloaded file when it is complete. | ||
.PARAMETER PackageName | ||
The name of the package we want to download - this is arbitrary, call it whatever you want. | ||
It's recommended you call it the same as your nuget package id. | ||
.PARAMETER FileFullPath | ||
This is the full path of the resulting file name. | ||
.PARAMETER Url | ||
This is the url to download the file from. | ||
.PARAMETER Url64bit | ||
OPTIONAL - If there is an x64 installer to download, please include it here. If not, delete this parameter | ||
.EXAMPLE | ||
Get-ChocolateyWebFile '__NAME__' 'C:\somepath\somename.exe' 'URL' '64BIT_URL_DELETE_IF_NO_64BIT' | ||
.NOTES | ||
This helper reduces the number of lines one would have to write to download a file to 1 line. | ||
There is no error handling built into this method. | ||
.LINK | ||
Install-ChocolateyPackage | ||
#> | ||
param( | ||
[string] $packageName, | ||
[string] $fileFullPath, | ||
[string] $url, | ||
[string] $url64bit = $url | ||
) | ||
Write-Debug "Running 'Get-ChocolateyWebFile' for $packageName with url:`'$url`', fileFullPath:`'$fileFullPath`',and url64bit:`'$url64bit`'"; | ||
|
||
$url32bit = $url; | ||
$processor = Get-WmiObject Win32_Processor | ||
$procCount=(Get-WmiObject Win32_ComputerSystem).NumberofProcessors | ||
if ($procCount -eq '1') { | ||
$is64bit = $processor.AddressWidth -eq 64 | ||
Write-Debug "Processor width is $($processor.AddressWidth)." | ||
} else { | ||
Write-Debug "First processor width is $($processor[0].AddressWidth)." | ||
$is64bit = $processor[0].AddressWidth -eq 64 | ||
} | ||
$systemBit = '32 bit' | ||
if ($is64bit) { | ||
$systemBit = '64 bit'; | ||
$url = $url64bit; | ||
} | ||
|
||
$downloadMessage = "Downloading $packageName ($url) to $fileFullPath" | ||
if ($url32bit -ne $url64bit) {$downloadMessage = "Downloading $packageName $systemBit ($url) to $fileFullPath.";} | ||
Write-Host "$downloadMessage" | ||
#$downloader = new-object System.Net.WebClient | ||
#$downloader.DownloadFile($url, $fileFullPath) | ||
if ($url.StartsWith('http')) { | ||
Get-WebFile $url $fileFullPath | ||
} elseif ($url.StartsWith('ftp')) { | ||
This comment has been minimized.
Sorry, something went wrong. |
||
Get-FtpFile $url $fileFullPath | ||
} else { | ||
Write-Debug "We are attempting to copy the local item `'$url`' to `'$fileFullPath`'" | ||
Copy-Item $url -Destination $fileFullPath -Force | ||
} | ||
|
||
Start-Sleep 2 #give it a sec or two to finish up | ||
} |
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,58 @@ | ||
## Get-FtpFile | ||
############################################################################################################## | ||
## Downloads a file from ftp | ||
## Some code from http://stackoverflow.com/questions/265339/whats-the-best-way-to-automate-secure-ftp-in-powershell | ||
## Additional functionality emulated from http://poshcode.org/417 (Get-WebFile) | ||
## Written by Stephen C. Austin, Pwnt & Co. http://pwnt.co | ||
############################################################################################################## | ||
function Get-FtpFile { | ||
param( | ||
$url = '', #(Read-Host "The URL to download"), | ||
$fileName = $null, | ||
$username = $null, | ||
$password = $null, | ||
[switch]$quiet | ||
) | ||
# Create a FTPWebRequest object to handle the connection to the ftp server | ||
$ftprequest = [System.Net.FtpWebRequest]::create($url) | ||
|
||
# set the request's network credentials for an authenticated connection | ||
$ftprequest.Credentials = | ||
New-Object System.Net.NetworkCredential($username,$password) | ||
|
||
$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile | ||
$ftprequest.UseBinary = $true | ||
$ftprequest.KeepAlive = $false | ||
|
||
# send the ftp request to the server | ||
$ftpresponse = $ftprequest.GetResponse() | ||
[int]$goal = $ftpresponse.ContentLength | ||
|
||
# get a download stream from the server response | ||
$reader = $ftpresponse.GetResponseStream() | ||
|
||
# create the target file on the local system and the download buffer | ||
$writer = New-Object IO.FileStream ($fileName,[IO.FileMode]::Create) | ||
[byte[]]$buffer = New-Object byte[] 1024 | ||
[int]$total = [int]$count = 0 | ||
|
||
# loop through the download stream and send the data to the target file | ||
do{ | ||
$count = $reader.Read($buffer, 0, $buffer.Length); | ||
$writer.Write($buffer, 0, $count); | ||
if(!$quiet) { | ||
$total += $count | ||
if($goal -gt 0) { | ||
Write-Progress "Downloading $url to $fileName" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100) | ||
} else { | ||
Write-Progress "Downloading $url to $fileName" "Saving $total bytes..." -id 0 -Completed | ||
} | ||
if ($total -eq $goal) { | ||
Write-Progress "Completed download of $url." "Completed a total of $total bytes of $fileName" -id 0 -Completed | ||
} | ||
} | ||
} while ($count -ne 0) | ||
|
||
$writer.Flush() | ||
$writer.close() | ||
} |
This is where the actual change (insertion) takes place.
Lines 64 + 65