Scripts/Remove-WOLComputerFromDatabase.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114

Function Remove-WOLComputerFromDatabase {

    <#
 
     .SYNOPSIS
     Remove the computer from the database
 
     .DESCRIPTION
     Remove the computer from the database
 
     .PARAMETER ComputerName
     The name of the computer to remove
 
     .PARAMETER Force
     This switch (optional) forces the deletion of records
     without prompting for confirmation
 
     .EXAMPLE
     Remove-WOLComputerFromDatabase -ComputerName LabPC2064
 
     .EXAMPLE
     Remove-WOLComputerFromDatabase -ComputerName LabPC2064 -Force
 
     .NOTES
     Wildcards are not allowed
 
     .LINK
     N/A
 
    #>


    [CmdletBinding (SupportsShouldProcess = $True,
                    ConfirmImpact = 'High'
                   )

    ]

    Param (

        [Parameter (Mandatory = $True,
                    ValueFromPipeline = $True,
                    ValueFromPipelineByPropertyName = $True,
                    HelpMessage = 'Enter computer name'
                   )
        ]

        [String[]]$ComputerName,

        [Switch]$Force

    )

    BEGIN {}

    PROCESS {

        ForEach ($Computer In $ComputerName) {

            $Computer = $Computer.toUpper()

            If ($Force -and $WhatIfPreference -eq $False -or $PSCmdlet.ShouldProcess('Wake On LAN database', "Removing: $Computer")) {

                $Path = $MyInvocation.MyCommand.Module.ModuleBase + '\System.Data.SQLite.dll'

                Add-Type -Path $Path

                $DBConnect = New-Object -TypeName System.Data.SQLite.SQLiteConnection
                $DBConnect.ConnectionString = "Data Source = $env:ALLUSERSPROFILE\PSWakeOnLAN\WOLDatabase.db3"
                $DBConnect.Open()

                $SQL = $DBConnect.CreateCommand()
                $SQL.CommandText = "DELETE FROM Computers WHERE Computer = ""$Computer"""
                $Records = $SQL.ExecuteNonQuery()

                $SQL.Dispose()
                $DBConnect.Close()

                Write-Verbose -Message "Records found = $Records"
                If ($Records -gt 0) {

                    [PsCustomObject]@{

                         'ComputerName' = $Computer
                         'Status' = 'Removed'

                    }

                }

            }

            Else {

                If ($WhatIfPreference -eq $False) {

                    [PsCustomObject]@{

                         'ComputerName' = $Computer
                         'Status' = 'Excluded'

                    }

                }

            }

        }

    }

    END {}

}