Public/Add-Computers.ps1

<#PSScriptInfo

.VERSION 1.0

.GUID 972a6d04-f905-4347-98b1-6bf00d8ce204

.AUTHOR dmcanady

.COMPANYNAME

.COPYRIGHT

.TAGS

.LICENSEURI

.PROJECTURI

.ICONURI

.EXTERNALMODULEDEPENDENCIES

.REQUIREDSCRIPTS

.EXTERNALSCRIPTDEPENDENCIES

.RELEASENOTES


.PRIVATEDATA

#>

function Add-Computers {
    param (
        [string[]]$serial_numbers,
        [string[]]$CS_numbers
    )

    $script:format = @{"format" = "yyyy-MM-dd HH:mm:ss" }

    #If sent serial
    if (-not([string]::IsNullOrEmpty($serial_numbers))) {
        foreach ($serial_number in $serial_numbers) {

            #sets new ID number
            $MaxID = Get-Computers | sort -Property ID -Descending | select -First 1
            $NewMaxID = $MaxID.ID + 1;

            #sets parameters for servicenow pull
            $ComputerData = @{
                "Table"      = "alm_hardware";
                "Filter"     = @(@("serial_number", "-like", "$serial_number"), "and", @("u_type", "-in", "Laptop, Mac_Laptop, Tablet"));
                "Properties" = @("u_last_physical_inventory_date", "serial_number", "display_name", "sys_id", "location"); #Added Location
            }
    
            #saves the pull data from servicenow
            $scannedDevice = Get-ServiceNowRecord @ComputerData | 
                Add-Member -Name AuditStatus -Value "Unexpected"  -MemberType NoteProperty -PassThru | 
                Add-Member -Name ID -Value $NewMaxID -MemberType NoteProperty -PassThru
 
            if (-not ([string]::IsNullOrEmpty($scannedDevice))) { #if scannedDevice found in service now add to audit. THIS IS WHERE WE NEED TO FLAG FOR REMEDATION
                $scannedDevice.u_last_physical_inventory_date = (Get-Date @script:format)
                $script:Computers += $scannedDevice
            } # End If
            else { #if not in servicenow create new object and add to hashtable
                
                $BadDevice = [PSCustomObject]@{
                    "ID"                             = $NewMaxID;
                    "serial_number"                  = $serial_number;
                    "u_last_physical_inventory_date" = (Get-Date @script:format);
                    "AuditStatus"                    = "BadScan";
                }
                $script:Computers += $BadDevice
            } # End Else
        }
    }
    #Else If sent CS#
    elseif (-not([string]::IsNullOrEmpty($CS_numbers))) {     
        foreach ($CS in $CS_numbers) {
            #sets new ID number
            $MaxID = Get-Computers | sort -Property ID -Descending | select -First 1
            $NewMaxID = $MaxID.ID + 1;
            #sets parameters for servicenow pull
            $ComputerData = @{
                "Filter"     = @(@("cat_item", "-in", "cd13f3032b7892001235717bf8da1580, e604f7032b7892001235717bf8da153c, a6b3bfcf2b3892001235717bf8da1530"), "and", @("number", "-eq", $CS));
                "Sort"       = @("state", "asc");
                "Table"      = "u_computer_support"; 
                "First"      = 1;
                "Properties" = @("number", "u_asset", "cat_item", "state", "u_substate", "u_depot_location", "u_serial_number", "u_wi_primary_tech");
            }

            #checks that data at leasts starts with CS# to limit unnecessary searches of servicenow
            if ($CS -like "CS*") { 

                $scannedDevice = Get-ServiceNowRecord @ComputerData | 
                    Add-Member -Name AuditStatus -Value "Unexpected"  -MemberType NoteProperty -PassThru | 
                    Add-Member -Name ID -Value $NewMaxID -MemberType NoteProperty -PassThru | 
                    Add-Member -Name Serial -Value "" -MemberType NoteProperty -PassThru
                #if the scanned CS# found in service now add to audit. THIS IS WHERE WE NEED TO FLAG FOR REMEDATION
                if (-not ([string]::IsNullOrEmpty($scannedDevice))) {
                    $script:Computers += $scannedDevice
                    DataFormat #format data for display
                } # End If
            }#End If
            else { #if not in servicenow create new object and add to hashtable as
                
                $BadDevice = [PSCustomObject]@{
                    "ID"                             = $NewMaxID;
                    "number"                         = $CS;
                    "AuditStatus"                    = "BadScan";
                }
                $script:Computers += $BadDevice
                
            } # End Else
        }
    }
}