Scripts/Add-WOLComputerToDatabase.ps1


Function Add-WOLComputerToDatabase {

    <#
 
     .SYNOPSIS
     Add a computer to the Wake On LAN database
 
     .DESCRIPTION
     Add a computer to the Wake On LAN database
 
     .PARAMETER ComputerName
     The name of the computer to add to the database
 
     .PARAMETER MACAddress
     The computer's physical address
 
     .EXAMPLE
     Add-WOLComputerToDatabase -ComputerName LabPC2064 -MACAddress AA:11:22:33:44:FF
 
     .NOTES
     The computer names and MAC addresses must be unique
 
     .LINK
     N/A
 
    #>


    [CmdletBinding ()]

    Param (

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

        [String[]]$ComputerName,

        [Parameter (Mandatory = $True,
                    ValueFromPipeline = $True,
                    ValueFromPipelineByPropertyName = $True,
                    HelpMessage = 'Enter MAC address'
                   )
        ]

        [String[]]$MACAddress

    )

    BEGIN {

        $MACIndex = 0

    }

    PROCESS {

        ForEach ($Computer In $ComputerName) {

            $Computer = $Computer.toUpper()
            $MACEntry = $MACAddress[$MACIndex].ToUpper()

            If ($MACEntry -notmatch '^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$') {

                [PsCustomObject]@{

                    'ComputerName' = $Computer
                    'MACAddress' = $MACEntry
                    'Status' = 'MAC address not formatted properly'

                }

            }

            Else {

                $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 = "SELECT * FROM Computers WHERE Computer = ""$Computer"" OR MAC = ""$MACEntry"""
                $Adapter = New-Object -TypeName System.Data.SQLite.SQLiteDataAdapter $SQL
                $Data = New-Object System.Data.DataSet
                $Result = $Adapter.Fill($Data)

                If ($Result -gt 0) {

                    $Status = 'Computer or MAC already in database'

                }

                Else {

                    $SQL.CommandText = 'INSERT INTO Computers (Computer, MAC) VALUES (@Computer, @MAC)'
                    $SQL.Parameters.AddWithValue('@Computer', $Computer) | Out-Null
                    $SQL.Parameters.AddWithValue('@MAC', $MACEntry) | Out-Null
                    $SQL.ExecuteNonQuery() | Out-Null

                    $Status = 'Added to database'

                }

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

                [PsCustomObject]@{

                    'ComputerName' = $Computer
                    'MACAddress' = $MACEntry
                    'Status' = $Status

                }

            }

            $MACIndex++

        }

    }

    END {}

}