mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			119 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
	
		
			3.6 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 OpenSSL for Windows.
 | 
						|
 | 
						|
 .PARAMETER ForceDownload
 | 
						|
 | 
						|
  Force a download even if the OpenSSL installers are already downloaded.
 | 
						|
 | 
						|
 .PARAMETER NoInstall
 | 
						|
 | 
						|
  Do not install the OpenSSL packages. By default, OpenSSL 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 "OpenSSL download and installation procedure"
 | 
						|
$OpenSSLHomePage = "http://slproweb.com/products/Win32OpenSSL.html"
 | 
						|
 | 
						|
# 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 OpenSSL downloads.
 | 
						|
$status = 0
 | 
						|
$message = ""
 | 
						|
try {
 | 
						|
    $response = Invoke-WebRequest -UseBasicParsing -UserAgent Download -Uri $OpenSSLHomePage
 | 
						|
    $status = [int] [Math]::Floor($response.StatusCode / 100)
 | 
						|
}
 | 
						|
catch {
 | 
						|
    $message = $_.Exception.Message
 | 
						|
}
 | 
						|
if ($status -ne 1 -and $status -ne 2) {
 | 
						|
    if ($message -eq "" -and (Test-Path variable:response)) {
 | 
						|
        Exit-Script "Status code $($response.StatusCode), $($response.StatusDescription)"
 | 
						|
    }
 | 
						|
    else {
 | 
						|
        Exit-Script "#### Error accessing ${OpenSSLHomePage}: $message"
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
# Parse HTML page to locate the latest MSI files.
 | 
						|
$Ref32 = $response.Links.href | Where-Object { $_ -like "*/Win32OpenSSL-*.msi" } | Select-Object -First 1
 | 
						|
$Ref64 = $response.Links.href | Where-Object { $_ -like "*/Win64OpenSSL-*.msi" } | Select-Object -First 1
 | 
						|
 | 
						|
# Build the absolute URL's from base URL (the download page) and href links.
 | 
						|
$Url32 = New-Object -TypeName 'System.Uri' -ArgumentList ([System.Uri]$OpenSSLHomePage, $Ref32)
 | 
						|
$Url64 = New-Object -TypeName 'System.Uri' -ArgumentList ([System.Uri]$OpenSSLHomePage, $Ref64)
 | 
						|
 | 
						|
# Download and install one MSI package.
 | 
						|
function Download-Install([string]$Url)
 | 
						|
{
 | 
						|
    $MsiName = (Split-Path -Leaf $Url.toString())
 | 
						|
    $MsiPath = "$TmpDir\$MsiName"
 | 
						|
 | 
						|
    if (-not $ForceDownload -and (Test-Path $MsiPath)) {
 | 
						|
        Write-Output "$MsiName already downloaded, use -ForceDownload to download again"
 | 
						|
    }
 | 
						|
    else {
 | 
						|
        Write-Output "Downloading $Url ..."
 | 
						|
        Invoke-WebRequest -UseBasicParsing -UserAgent Download -Uri $Url -OutFile $MsiPath
 | 
						|
    }
 | 
						|
 | 
						|
    if (-not (Test-Path $MsiPath)) {
 | 
						|
        Exit-Script "$Url download failed"
 | 
						|
    }
 | 
						|
 | 
						|
    if (-not $NoInstall) {
 | 
						|
        Write-Output "Installing $MsiName"
 | 
						|
        Start-Process msiexec.exe -ArgumentList @("/i", $MsiPath, "/qn", "/norestart") -Wait
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
# Download and install the two MSI packages.
 | 
						|
Download-Install $Url32
 | 
						|
Download-Install $Url64
 | 
						|
Exit-Script
 |