tak.putty.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
62
63

function Add-PuttySession {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline,Mandatory)]
        [string]
        $Name,
        [Parameter()]
        [string]
        $HostName,
        [Parameter()]
        [switch]
        $Logging 
    )
    process {
        if(-not($HostName)){
            Write-Verbose "No HostName set, using $Name"
            $HostName = $Name
        }
        if($item = New-Item -Path HKCU:\SOFTWARE\SimonTatham\PuTTY\Sessions -Name $Name -ErrorAction SilentlyContinue){
            $prop = New-ItemProperty -Path $item.pspath -Name HostName -PropertyType String -Value $HostName     
            if($Logging) {
                $null = New-ItemProperty -Path $item.pspath -Name LogFileName -PropertyType String -Value "$Name.txt"
                $null = New-ItemProperty -Path $item.pspath -Name LogType -PropertyType DWord -Value 2
            }
        }
        Get-PuttySession -Name $Name
    }
}

function Get-PuttySession {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline)]
        $Name = "*"
    )
    process {
        $Prop = @(
            "HostName",
            "PortNumber",
            "Protocol",
            "TerminalType",
            "LogType",
            "LogFileName"
        )
        Get-ItemProperty -Path "HKCU:\SOFTWARE\SimonTatham\PuTTY\Sessions\$Name" -Name $Prop -ErrorAction SilentlyContinue | 
            Select-Object -Property (@(@{n="Name";e={$_.PsChildName}}) + $Prop)
    }
}

function Remove-PuttySession {
    [CmdletBinding(SupportsShouldProcess=$true)]
    param (
        [Parameter(Mandatory,ValueFromPipelineByPropertyName)]
        $Name
    )
    process {
        if ($pscmdlet.ShouldProcess($Name, "Remove Putty Session")) {
            Remove-Item -Path "HKCU:\SOFTWARE\SimonTatham\PuTTY\Sessions\$Name"
        }
    }
}