mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			122 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
| #-----------------------------------------------------------------------------
 | |
| #
 | |
| #  SRT - Secure, Reliable, Transport
 | |
| #  Copyright (c) 2021, Thierry Lelegard
 | |
| # 
 | |
| #  This Source Code Form is subject to the terms of the Mozilla Public
 | |
| #  License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
| #  file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | |
| #
 | |
| #-----------------------------------------------------------------------------
 | |
| 
 | |
| <#
 | |
|  .SYNOPSIS
 | |
| 
 | |
|   Download, expand and install NSIS, the NullSoft Installer Scripting.
 | |
| 
 | |
|  .PARAMETER ForceDownload
 | |
| 
 | |
|   Force a download even if NSIS is already downloaded.
 | |
| 
 | |
|  .PARAMETER NoInstall
 | |
| 
 | |
|   Do not install the NSIS package. By default, NSIS is installed.
 | |
| 
 | |
|  .PARAMETER NoPause
 | |
| 
 | |
|   Do not wait for the user to press <enter> at end of execution. By default,
 | |
|   execute a "pause" instruction at the end of execution, which is useful
 | |
|   when the script was run from Windows Explorer.
 | |
| #>
 | |
| [CmdletBinding(SupportsShouldProcess=$true)]
 | |
| param(
 | |
|     [switch]$ForceDownload = $false,
 | |
|     [switch]$NoInstall = $false,
 | |
|     [switch]$NoPause = $false
 | |
| )
 | |
| 
 | |
| Write-Output "NSIS download and installation procedure"
 | |
| $NSISPage = "https://nsis.sourceforge.io/Download"
 | |
| $FallbackURL = "http://prdownloads.sourceforge.net/nsis/nsis-3.05-setup.exe?download"
 | |
| 
 | |
| # A function to exit this script.
 | |
| function Exit-Script([string]$Message = "")
 | |
| {
 | |
|     $Code = 0
 | |
|     if ($Message -ne "") {
 | |
|         Write-Output "ERROR: $Message"
 | |
|         $Code = 1
 | |
|     }
 | |
|     if (-not $NoPause) {
 | |
|         pause
 | |
|     }
 | |
|     exit $Code
 | |
| }
 | |
| 
 | |
| # Local file names.
 | |
| $RootDir = $PSScriptRoot
 | |
| $TmpDir = "$RootDir\tmp"
 | |
| 
 | |
| # Create the directory for external products when necessary.
 | |
| [void] (New-Item -Path $TmpDir -ItemType Directory -Force)
 | |
| 
 | |
| # Without this, Invoke-WebRequest is awfully slow.
 | |
| $ProgressPreference = 'SilentlyContinue'
 | |
| 
 | |
| # Get the HTML page for NSIS downloads.
 | |
| $status = 0
 | |
| $message = ""
 | |
| $Ref = $null
 | |
| try {
 | |
|     $response = Invoke-WebRequest -UseBasicParsing -UserAgent Download -Uri $NSISPage
 | |
|     $status = [int] [Math]::Floor($response.StatusCode / 100)
 | |
| }
 | |
| catch {
 | |
|     $message = $_.Exception.Message
 | |
| }
 | |
| 
 | |
| if ($status -ne 1 -and $status -ne 2) {
 | |
|     # Error fetch NSIS download page.
 | |
|     if ($message -eq "" -and (Test-Path variable:response)) {
 | |
|         Write-Output "Status code $($response.StatusCode), $($response.StatusDescription)"
 | |
|     }
 | |
|     else {
 | |
|         Write-Output "#### Error accessing ${NSISPage}: $message"
 | |
|     }
 | |
| }
 | |
| else {
 | |
|     # Parse HTML page to locate the latest installer.
 | |
|     $Ref = $response.Links.href | Where-Object { $_ -like "*/nsis-*-setup.exe?download" } | Select-Object -First 1
 | |
| }
 | |
| 
 | |
| if (-not $Ref) {
 | |
|     # Could not find a reference to NSIS installer.
 | |
|     $Url = [System.Uri]$FallbackURL
 | |
| }
 | |
| else {
 | |
|     # Build the absolute URL's from base URL (the download page) and href links.
 | |
|     $Url = New-Object -TypeName 'System.Uri' -ArgumentList ([System.Uri]$NSISPage, $Ref)
 | |
| }
 | |
| 
 | |
| $InstallerName = (Split-Path -Leaf $Url.LocalPath)
 | |
| $InstallerPath = "$TmpDir\$InstallerName"
 | |
| 
 | |
| # Download installer
 | |
| if (-not $ForceDownload -and (Test-Path $InstallerPath)) {
 | |
|     Write-Output "$InstallerName already downloaded, use -ForceDownload to download again"
 | |
| }
 | |
| else {
 | |
|     Write-Output "Downloading $Url ..."
 | |
|     Invoke-WebRequest -UseBasicParsing -UserAgent Download -Uri $Url -OutFile $InstallerPath
 | |
|     if (-not (Test-Path $InstallerPath)) {
 | |
|         Exit-Script "$Url download failed"
 | |
|     }
 | |
| }
 | |
| 
 | |
| # Install NSIS
 | |
| if (-not $NoInstall) {
 | |
|     Write-Output "Installing $InstallerName"
 | |
|     Start-Process -FilePath $InstallerPath -ArgumentList @("/S") -Wait
 | |
| }
 | |
| 
 | |
| Exit-Script
 |