PoshHosts.psm1
<#
.SYNOPSIS The hosts commands allows you to control the hosts file .DESCRIPTION The hosts commands allows you to control the hosts file, by adding/removing entries; as well enabling/disabling them. Hosts also supports profiles, so you can have a developer hosts file in your repo and import/merge it for developers. You can also test the entries by pinging them, either using the normal ping or by passing specific ports. .EXAMPLE hosts add 127.0.0.3 dev.test.local .EXAMPLE hosts export ./local.hosts .EXAMPLE hosts test *.local 80, 443 .EXAMPLE hosts list -e dev #> function Hosts { param ( [Parameter(Position=0, Mandatory=$true)] [ValidateSet('add', 'backup', 'clear', 'diff', 'disable', 'enable', 'export', 'import', 'list', 'merge', 'path', 'remove', 'restore', 'set', 'test')] [Alias('a')] [string] $Action, [Parameter(Position=1)] [Alias('v1')] [string[]] $Value1, [Parameter(Position=2)] [Alias('v2')] [string[]] $Value2, [Parameter()] [Alias('p')] [string] $HostsPath, [Parameter()] [Alias('e')] [string] $Environment ) if (@('diff', 'list', 'path', 'test') -inotcontains $Action) { Test-AdminUser } try { $Script:HostsFilePath = $HostsPath Invoke-HostsAction -Action $Action -Value1 $Value1 -Value2 $Value2 -Environment $Environment } finally { $Script:HostsFilePath = [string]::Empty } } # load other functions $root = Split-Path -Parent -Path $MyInvocation.MyCommand.Path Get-ChildItem "$($root)\Tools.ps1" | Resolve-Path | ForEach-Object { . $_ } # Export the Hosts function only Export-ModuleMember -Function Hosts |