param( [string]$Name = "eShopOnContainers", [string]$InboundDisplayName = "eShopOnContainers-Inbound", [string]$OutboundDisplayName = "eShopOnContainers-Outbound", [switch]$Elevated ) function Check-Admin { $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent()) $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) } function Add-InboundRule { New-NetFirewallRule -DisplayName $InboundDisplayName -Confirm -Description "$Name Inbound Rule for port range 5100-5205" -LocalAddress Any -LocalPort 5100-5205 -Protocol tcp -RemoteAddress Any -RemotePort Any -Direction Inbound } function Add-OutboundRule { New-NetFirewallRule -DisplayName $OutboundDisplayName -Confirm -Description "$Name Outbound Rule for port range 5100-5205" -LocalAddress Any -LocalPort 5100-5205 -Protocol tcp -RemoteAddress Any -RemotePort Any -Direction Outbound } if ((Check-Admin) -eq $false) { if ($elevated) { # could not elevate, quit } else { Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition)) } exit } try { $rules = $(Get-NetFirewallRule -DisplayName $Name-* -ErrorAction Stop | Out-String) if (!$rules.Contains($InboundDisplayName) -and !$rules.Contains($OutboundDisplayName)) { Add-InboundRule Add-OutboundRule } elseif (!$rules.Contains($InboundDisplayName)) { Add-InboundRule } elseif (!$rules.Contains($OutboundDisplayName)) { Add-OutboundRule } else{ Write-Host "Rules found!" } } catch [Exception] { Add-InboundRule Add-OutboundRule }