AitonVPNTools.psm1
|
class HostsWritter { [String]$hostsPath [String]$dockerMachineIp [String]$localNexusName HostsWritter([String]$hostsPath, [String]$dockerMachineIp, [String]$localNexusName) { $this.hostsPath = $hostsPath $this.dockerMachineIp = $dockerMachineIp $this.localNexusName = $localNexusName } Add() { Write-Verbose "Adding hosts entry for instance: $this" $this.Remove() $filtered = Get-Content $this.hostsPath $filtered += "`r`n" $filtered += $this.dockerMachineIp + " " + $this.localNexusName + "`r`n" Set-Content -Value $filtered -Path $this.hostsPath } Remove() { Write-Verbose "Remove hosts entry for instance: $this" (Get-Content $this.hostsPath) | Where-Object { $_ -notmatch $this.dockerMachineIp } | Set-Content $this.hostsPath } [String]ToString() { return ($this.dockerMachineIp + " " + $this.hostsPath + " " + $this.localNexusName) } } function Has-NeededPrivilages() { $currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) return $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) } function Exit-AfterFail($message) { Get-Process *openvpn* | Stop-Process -Force throw $message } function AitonVPN-Connect { [CmdletBinding()] Param( [Parameter(Mandatory=$True, Position=1)] [String]$vpnPassword, [String]$pathToVPNConf = 'C:\Program Files\OpenVPN\config\aiton\milewskip.ovpn', [String]$localNexusName = 'repository.dev.avecezar.org', [String]$dockerMachineIp = '127.0.0.1', [String]$hostsPath = "$env:windir\System32\drivers\etc\hosts", [String]$openVPNExePath = "C:\Program Files\OpenVPN\bin\openvpn.exe" ) Write-Verbose "AitonVPN-Connect $pathToVPNConf $localNexusName $dockerMachineIp $hostsPath $openVPNExePath" if ((Has-NeededPrivilages) -eq $False) { Exit-AfterFail "Please run with Administrator rights. This module needs administrator privileges for editing hosts table." } [HostsWritter]$hostsWritter = New-Object HostsWritter($hostsPath, $dockerMachineIp, $localNexusName) $confParentPath = Split-Path -Parent $local:pathToVPNConf $command = "&{Set-Location -Path `'$local:confParentPath`'; echo `'$local:vpnPassword`' | & `'$local:openVPNExePath`' --config `'$local:pathToVPNConf`' }" $command = "-Command `"$command`"" Start-Process powershell -ArgumentList $command -WindowStyle Hidden $hostsWritter.Remove() } function AitonVPN-Disconnect { [CmdletBinding()] Param( [String]$localNexusName = 'repository.dev.avecezar.org', [String]$dockerMachineIp = '127.0.0.1', [String]$hostsPath = "$env:windir\System32\drivers\etc\hosts" ) Write-Verbose "AitonVPN-Disconnect $localNexusName $dockerMachineIp $hostsPath" if ((Has-NeededPrivilages) -eq $False) { throw "Please run with Administrator rights. This module needs administrator privileges for killing processes (OpenVPN) and editing hosts table." } [HostsWritter]$hostsWritter = New-Object HostsWritter($hostsPath, $dockerMachineIp, $localNexusName) Get-Process *openvpn* | Stop-Process -Force $hostsWritter.Add() } Export-ModuleMember -Function AitonVPN-Connect, AitonVPN-Disconnect |