# get-casURL # # Parses all CAS URLs, checks SSL and default path # reports a table für further processing # # Version 1.0 20111028 Initial Version # Version 1.1 20111102 URL Validation case sensible due "Canary problem" function parse-uri { Param( [string]$service, [string]$server, [string]$name, [string]$uri, [string]$defaultpath ) $result = "" | select service,server,name,ssl,urihost,uripath,pathok $result.service = $service $result.server = $server $result.name = $name #http://www.cambiaresearch.com/c4/890160aa-bc4e-40fc-ac36-c1031858c048/Parsing-URLs-with-Regular-Expressions-and-the-Regex-Object.aspx?page=1 #[regex]$reg="^(?(?[^:/\?#]+):)?(?//(?[^/\?#]*))?(?[^\?#]*)(?\?(?[^#]*))?(?#(?.*))?" # "-match" setzt eine spezielle Variable "$matches" if ($uri -match "^(?:(?[^:/\?#]+):)?(?://(?[^/\?#]*))?(?[^\?#]*)(?:\?(?[^#]*))?(?:\#(?.*))?") { write-verbose "Match found" $result.ssl = ($matches["protocol"] -eq "https") $result.urihost = $matches["authority"] $result.uripath = $matches["path"] $result.pathok = (($result.uripath -ceq $defaultpath)-or ($result.uripath -eq "")) } else { write-verbose "NO Match found" $result.ssl = $null $result.urihost = "nomatch" $result.uripath = "nomatch" $result.pathok = "nomatch" } $result } # Create table für results $resulttable = @() Write-Host "Parsing Client Access Server" -NoNewline foreach ($entry in Get-ClientAccessServer){ Write-Host "." -NoNewline $result = parse-uri "SPN" $entry.name $entry.name $entry.AutoDiscoverServiceInternalUri "/Autodiscover/Autodiscover.xml" $resulttable += $result } Write-Host "done" Write-Host "Get EWS" -NoNewline foreach ($entry in Get-WebServicesVirtualDirectory){ Write-Host "." -NoNewline $result = parse-uri "EWSInt" $entry.server $entry.name $entry.InternalURL "/EWS/Exchange.asmx" $resulttable += $result $result = parse-uri "EWSExt" $entry.server $entry.name $entry.ExternalURL "/ews/exchange.asmx" $resulttable += $result $result = parse-uri "EWSNLB" $entry.server $entry.name $entry.InternalNLBBypassURL "/ews/exchange.asmx" $resulttable += $result } Write-Host "Get OWA" -NoNewline foreach ($entry in Get-OwaVirtualDirectory){ Write-Host "." -NoNewline $result = parse-uri "OWAInt" $entry.server $entry.name $entry.InternalURL "/owa" $resulttable += $result $result = parse-uri "OWAExt" $entry.server $entry.name $entry.ExternalURL "/owa" $resulttable += $result $result = parse-uri "OWALegacy" $entry.server $entry.name $entry.Exchange2003URL "/Exchange" $resulttable += $result $result = parse-uri "OWAFallback" $entry.server $entry.name $entry.FailbackURL "/owa" $resulttable += $result } Write-Host "Get EAS" -NoNewline foreach ($entry in Get-ActiveSyncVirtualDirectory){ Write-Host "." -NoNewline $result = parse-uri "EASInt" $entry.server $entry.name $entry.InternalURL "/Microsoft-Server-ActiveSync" $resulttable += $result $result = parse-uri "EASExt" $entry.server $entry.name $entry.ExternalURL "/Microsoft-Server-ActiveSync" $resulttable += $result } Write-Host "Get OA" -NoNewline foreach ($entry in Get-OutlookAnywhere){ Write-Host "." -NoNewline $result = parse-uri "OAHost" $entry.server $entry.name "host://"+$entry.ExternalHostname "" $resulttable += $result } Write-Host "Get OAB" -NoNewline foreach ($entry in get-OABVirtualDirectory){ Write-Host "." -NoNewline $result = parse-uri "OABInt" $entry.server $entry.name $entry.InternalURL "/OAB" $resulttable += $result $result = parse-uri "OABExt" $entry.server $entry.name $entry.ExternalURL "/OAB" $resulttable += $result } Write-Host "Get UM" -NoNewline foreach ($entry in get-UMVirtualDirectory){ Write-Host "." -NoNewline $result = parse-uri "UMInt" $entry.server $entry.name $entry.InternalURL "/UnifiedMessaging/Service.asmx" $resulttable += $result $result = parse-uri "UMExt" $entry.server $entry.name $entry.ExternalURL "/UnifiedMessaging/Service.asmx" $resulttable += $result } Write-Host "Get ECP" -NoNewline foreach ($entry in get-EcpVirtualDirectory){ Write-Host "." -NoNewline $result = parse-uri "ECPInt" $entry.server $entry.name $entry.InternalURL "/ecp" $resulttable += $result $result = parse-uri "ECPExt" $entry.server $entry.name $entry.ExternalURL "/ecp" $resulttable += $result } Write-Host "Get PS" -NoNewline foreach ($entry in get-PowerShellVirtualDirectory){ Write-Host "." -NoNewline $result = parse-uri "PSInt" $entry.server $entry.name $entry.InternalURL "/PowerShell" $resulttable += $result $result = parse-uri "PSExt" $entry.server $entry.name $entry.ExternalURL "/PowerShell" $resulttable += $result } $resulttable