Get-UrlAcl.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Function Get-UrlAcl {
    [CmdletBinding()] 
    Param( 
        [Parameter(Position=0)]
        [string]$Url
    )

    $cmd = "netsh http show urlacl"
    if(-not [string]::IsNullOrWhiteSpace($Url)){
        $cmd += " url=$Url"
    }

    $result = Invoke-Expression $cmd

    $result = $result | Select-Object -Skip 4

    $items = @()
    $item = [UrlAcl]::new()
    $user = [UrlAclUser]::new()
    for($i = 0; $i -lt $result.Length;$i++){
        $line = $result[$i]
        if([string]::IsNullOrWhiteSpace($line)){
            continue;
        }
        $splitIndex = $line.IndexOf(": ");
        $key = $line.Substring(0,$splitIndex).Trim();
        $value = $line.Substring($splitIndex +2);
        
        if($key -eq "Reserved Url"){
            $item = [UrlAcl]::new()
            $item.Url = $value
            $items += $item
        }
        if($key -eq "User"){            
            $user = [UrlAclUser]::new()
            $user.Name = $value
            $item.Users += $user
        }
        if($key -eq "Listen"){
            $user.Listen = if($value -eq "Yes") { $true } else { $false }
        }
        if($key -eq "Delegate"){
            $user.Delegate = if($value -eq "Yes") { $true } else { $false }
        }
        if($key -eq "SDDL"){
            $user.SSDL = $value
        }
    }
    return $items
}

Class UrlAcl{
    [string]$Url
    [UrlAclUser[]]$Users
}
Class UrlAclUser{
    [string]$Name
    [boolean]$Listen
    [boolean]$Delegate
    [string]$SSDL
}