2023-06-01 20:35:29 +00:00
# Create C:\development
2023-06-05 21:05:14 +00:00
New-Item -Path 'C:\development' -ItemType Directory -ErrorAction Ignore
# $wc = [System.Net.WebClient]::new()
# $publishedHash = '8E28E54D601F0751922DE24632C1E716B4684876255CF82304A9B19E89A9CCAC'
# $FileHash = Get-FileHash -InputStream ($wc.OpenRead("C:\development\flutter_windows_3.7.12-stable.zip"))
# if (-Not [System.IO.File]::Exists("C:\development\flutter_windows_3.7.12-stable.zip") or -Not ($FileHash.Hash -eq $publishedHash)) {
# } else {
2023-06-01 21:53:59 +00:00
# Download flutter_windows_3.7.12-stable.zip
2023-06-05 21:05:14 +00:00
# Write-Output "Downloading flutter_windows_3.7.12-stable.zip"
# $ProgressPreference = 'SilentlyContinue' # Speed up download process, see https://stackoverflow.com/questions/28682642/powershell-why-is-using-invoke-webrequest-much-slower-than-a-browser-download
# Invoke-WebRequest "https://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_3.7.12-stable.zip" -OutFile "C:\development\flutter_windows_3.7.12-stable.zip"
# }
2023-06-01 20:35:29 +00:00
# Extract Flutter SDK
2023-06-05 21:05:14 +00:00
Write-Output " Extracting flutter_windows_3.7.12-stable.zip "
$progressPreference = 'SilentlyContinue' # Speed up extraction process, see https://github.com/PowerShell/Microsoft.PowerShell.Archive/issues/32#issuecomment-642582179
# Add-MpPreference -ExclusionPath C:\development
# Expand-Archive "C:\development\flutter_windows_3.7.12-stable.zip" -DestinationPath "C:\development"
Add-Type -Assembly " System.IO.Compression.Filesystem "
[ System.IO.Compression.ZipFile ] :: ExtractToDirectory ( " C:\development\flutter_windows_3.7.12-stable.zip " , " C:\development " )
2023-06-01 20:35:29 +00:00
# See https://stackoverflow.com/a/69239861
function Add-Path {
param (
[ Parameter ( Mandatory , Position = 0 ) ]
[ string ] $LiteralPath ,
[ ValidateSet ( 'User' , 'CurrentUser' , 'Machine' , 'LocalMachine' ) ]
[ string ] $Scope
)
Set-StrictMode -Version 1 ; $ErrorActionPreference = 'Stop'
$isMachineLevel = $Scope -in 'Machine' , 'LocalMachine'
if ( $isMachineLevel -and -not $ ( $ErrorActionPreference = 'Continue' ; net session 2 > $null ) ) { throw " You must run AS ADMIN to update the machine-level Path environment variable. " }
$regPath = 'registry::' + ( 'HKEY_CURRENT_USER\Environment' , 'HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' ) [ $isMachineLevel ]
# Note the use of the .GetValue() method to ensure that the *unexpanded* value is returned.
$currDirs = ( Get-Item -LiteralPath $regPath ) . GetValue ( 'Path' , '' , 'DoNotExpandEnvironmentNames' ) -split ';' -ne ''
if ( $LiteralPath -in $currDirs ) {
Write-Verbose " Already present in the persistent $( ( 'user' , 'machine' ) [ $isMachineLevel ] ) -level Path: $LiteralPath "
return
}
$newValue = ( $currDirs + $LiteralPath ) -join ';'
# Update the registry.
Set-ItemProperty -Type ExpandString -LiteralPath $regPath Path $newValue
# Broadcast WM_SETTINGCHANGE to get the Windows shell to reload the
# updated environment, via a dummy [Environment]::SetEnvironmentVariable() operation.
$dummyName = [ guid ] :: NewGuid ( ) . ToString ( )
[ Environment ] :: SetEnvironmentVariable ( $dummyName , 'foo' , 'User' )
[ Environment ] :: SetEnvironmentVariable ( $dummyName , [ NullString ] :: value , 'User' )
# Finally, also update the current session's `$env:Path` definition.
# Note: For simplicity, we always append to the in-process *composite* value,
# even though for a -Scope Machine update this isn't strictly the same.
$env:Path = ( $env:Path -replace ';$' ) + ';' + $LiteralPath
Write-Verbose " `" $LiteralPath `" successfully appended to the persistent $( ( 'user' , 'machine' ) [ $isMachineLevel ] ) -level Path and also the current-process value. "
}
# Add Flutter SDK to PATH if it's not there already
if ( $Env:Path -split " ; " -contains 'C:\development\flutter\bin' ) {
2023-06-05 21:05:14 +00:00
Write-Output " Flutter SDK in PATH, done "
2023-06-01 20:35:29 +00:00
} else {
2023-06-05 21:05:14 +00:00
Write-Output " Attempting to add Flutter SDK to PATH "
2023-06-01 20:35:29 +00:00
Add-Path ( " C:\development\flutter\bin " )
}