mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-05-14 08:41:28 +00:00
93 lines
2.9 KiB
PowerShell
93 lines
2.9 KiB
PowerShell
#Requires -RunAsAdministrator
|
|
Param(
|
|
[Parameter(Mandatory, HelpMessage="Please provide an alias for 127.0.0.1")][string] $LoopbackAlias,
|
|
[string] $Action = "install"
|
|
)
|
|
|
|
New-Variable -Name "sysdir" -Value ([Environment]::SystemDirectory) -Option Constant -Scope Global
|
|
New-Variable -Name "hostsFile" -Value "$sysdir\drivers\etc\hosts" -Option Constant -Scope Global
|
|
|
|
# Adds an alias for 127.0.0.1 to the hosts file
|
|
function Add-AliasToHost {
|
|
param (
|
|
[string]$LoopbackAlias
|
|
)
|
|
$aliasLine = "127.0.0.1 $LoopbackAlias"
|
|
|
|
foreach ($line in Get-Content $hostsFile) {
|
|
if ($line -eq $aliasLine){
|
|
return
|
|
}
|
|
}
|
|
|
|
$content = Get-Content $hostsFile
|
|
$content += "`r`n$aliasLine"
|
|
|
|
$content | Set-Content "$hostsFile.tmp" -Encoding ascii
|
|
Move-Item "$hostsFile.tmp" $hostsFile -Force
|
|
}
|
|
|
|
# Removes an alias for 127.0.0.1 from the hosts file
|
|
function Remove-AliasFromHost {
|
|
param (
|
|
[string]$LoopbackAlias
|
|
)
|
|
$aliasLine = "127.0.0.1 $LoopbackAlias"
|
|
|
|
$content = Get-Content $hostsFile
|
|
$newContent = $content | Where-Object { $_ -ne $aliasLine }
|
|
|
|
$newContent | Set-Content "$hostsFile.tmp" -Encoding ascii
|
|
Move-Item "$hostsFile.tmp" $hostsFile -Force
|
|
}
|
|
|
|
# Sets in the registry the webclient file size limit to the maximum value
|
|
function Set-WebDAVFileSizeLimit {
|
|
# Set variables to indicate value and key to set
|
|
$RegistryPath = 'HKLM:\SYSTEM\CurrentControlSet\Services\WebClient\Parameters'
|
|
$Name = 'FileSizeLimitInBytes'
|
|
$Value = '0xffffffff'
|
|
|
|
# Create the key if it does not exist
|
|
If (-NOT (Test-Path $RegistryPath)) {
|
|
New-Item -Path $RegistryPath -Force | Out-Null
|
|
}
|
|
|
|
# Now set the value
|
|
New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force | Out-Null
|
|
}
|
|
|
|
|
|
# Changes the network provider order such that the builtin Windows webclient is always first
|
|
function Edit-ProviderOrder {
|
|
$RegistryPath = 'HKLM:\SYSTEM\CurrentControlSet\Control\NetworkProvider\HwOrder'
|
|
$Name = 'ProviderOrder'
|
|
$WebClientString = 'webclient'
|
|
|
|
$CurrentOrder = (Get-ItemProperty $RegistryPath $Name).$Name
|
|
|
|
$OrderWithoutWebclientArray = $CurrentOrder -split ',' | Where-Object {$_ -ne $WebClientString}
|
|
$WebClientArray = @($WebClientString)
|
|
|
|
$UpdatedOrder = ($WebClientArray + $OrderWithoutWebclientArray) -join ","
|
|
New-ItemProperty -Path $RegistryPath -Name $Name -Value $UpdatedOrder -PropertyType String -Force | Out-Null
|
|
}
|
|
|
|
if ($Action -eq "install") {
|
|
Add-AliasToHost $LoopbackAlias
|
|
Write-Output 'Ensured alias exists in hosts file'
|
|
|
|
Set-WebDAVFileSizeLimit
|
|
Write-Output 'Set WebDAV file size limit'
|
|
|
|
Edit-ProviderOrder
|
|
Write-Output 'Ensured correct provider order'
|
|
} elseif ($Action -eq "uninstall") {
|
|
Remove-AliasFromHost $LoopbackAlias
|
|
Write-Output 'Ensured alias removed from hosts file'
|
|
} else {
|
|
Write-Error "Invalid action: $Action. Only 'install' or 'uninstall' are valid."
|
|
}
|
|
|
|
exit 0
|