get-PCInfo.ps1

<#
        Hej Daniel!
        Velkommen til vores functions.
 
        Vi har lavet to funktioner, henholdsvis Get-PCInfo og Get-LocalPCInfo, som kan bruges i forbindelse med forbindelse med undersøgelse af computere.
 
        .SYNOPSIS
        Med disse functions kan du nemt og hurtigt finde relevante oplysninger om en enhed, såsom dens installationsdato og dens OS-Build.
 
        .DESCRIPTION
        Finder nemt og hurtigt relevante informationer om den pc, man enten er på lokalt eller tilslutter.
        Der er mulighed for hhv. Get-PCInfo for en ekstern enhed og kommandoen Get-LocalPCInfo for din egen enhed.
 
        .PARAMETER Computername
        Her defineres det computernavn, der skal trækkes oplysninger fra.
 
        .PARAMETER Username
        Her defineres det brugernavn, der skal trækkes oplysninger fra den valgte computer.
 
        .EXAMPLE
        Get-PCInfo -UserName Administrator -ComputerName Server-01
        > Her vil informationerne fra en server blive vist.
 
        Get-LocalPCInfo
        > Her vil informationerne fra din pc blive vist.
         
        .INPUTS
        Der er to muligheder, henholdsvis:
        -ComputerName
        -UserName
        Se .Parameter for informationerne herfor. :)
         
        .OUTPUTS
        Output er en liste over oplysningerne fra den definerede enhed.
        - User
        - Lastlogon
        - ComputerName
        - IP_address
        - LastRebootTime
        - BuildNumber
        - BuildVersion
        - BuildCaption
        - InstallDate
        - Hotfixes
 
        .NOTES
            FunctionName : UltraCoolFunction-getPCInfo
            Created by : Joachim, Marcus og Mikkel
            Date Coded : 06-08-2022 09:20:21
 
        .LINK
            https://aarhustech.itslearning.com
     #>

function get-PCInfo {

    [CmdletBinding(SupportsShouldProcess)]
    param (
        # Parameter help description
        [Parameter(Mandatory)]
        [String[]]
        $Computername,

        [Parameter(Mandatory)]
        [String]
        $Username
    )

begin {
    foreach ($computer in $computername) {
    $PSSession = New-PSSession -HostName $Computer -UserName $username
}

    $PSSession = Get-PSSession

}

PROCESS
{

        Invoke-Command -Session $PSSession -ScriptBlock {
        Enter-PSSession -ComputerName $Computername 

        $Params = @{
            ClassName = "Win32_ComputerSystem"
        }

    #Finder brugerens brugernavn og fjerne unødvendige tegn før brugernavnet
    $CurrentUser = Get-CimInstance @Params | Select-Object UserName
    $CurrentUser = $CurrentUser.UserName
    $CurrentUser = $CurrentUser -replace ('.*\\','')

    #Finder hvornår brugeren sidst var logget på computeren
    $lastlogon = Get-CimInstance -ClassName Win32_LoggedOnUser -ComputerName $computer
    $lastlogon = $lastlogon | Where-Object {$_.Antecedent.name -like "*$Currentuser*"}
    $Lastlogon = $Lastlogon | Select-Object {$_.Dependent.LogonID}
    $LastlogonID = $Lastlogon | Select-Object -Unique
    $LastlogonID = $LastlogonID.'$_.Dependent.LogonID'

    $lastlogontime = Get-CimInstance -ClassName "Win32_LogonSession" -ComputerName $computer | Where-Object {$_.LogonID -like "$LastlogonID"} | Select-Object StartTime

    $lastlogontime = $lastlogontime.StartTime
    
    $Params.ClassName = "Win32_NetworkAdapterConfiguration"

    #Her finder vi den aktive IPv4-adresse og MAC-adresse på computeren, ved Get-CimInstance og filter for adressen.
    $IP = Get-CimInstance @Params -filter "IPEnabled = $true" | Select-Object @{N='IPv4'; E={($_."IPAddress")-split(",")[0]}}
    $IP = $IP.IPv4

    $Params.ClassName = "Win32_OperatingSystem"

    #Her findes computerens navn.
    $Computersname = Get-CimInstance @Params | Select-Object CSName
    $Computersname = $Computersname.CSName

    #Her findes computerens sidste "startup tid" altså LastBootUpTime.
    $LastReboot = Get-CimInstance @Params | Select-Object LastBootUpTime
    $LastReboot = $LastReboot.LastBootUpTime
    
    #Her findes build number.
    $Buildnumber = Get-CimInstance @Params | Select-Object BuildNumber
    $Buildnumber = $Buildnumber.BuildNumber

    #Her beskrives versionen.
    $BuildVersion = Get-CimInstance @Params | Select-Object Version
    $BuildVersion = $BuildVersion.Version

    #Beskriver Buildversionen
    $BuildCaption = Get-CimInstance @Params | Select-Object Caption
    $BuildCaption = $BuildCaption.Caption

    #Her findes dato for installation "installdate"
    $InstallDate = Get-CimInstance  @Params | Select-Object InstallDate
    $InstallDate = $InstallDate.InstallDate

    $Params.ClassName = "Win32_QuickFixEngineering"

    #Her findes en liste over de forskellige hotfixes, der er installerede på computeren
    $Hotfixes = Get-CimInstance @Params | Select-Object HotFixID
    $Hotfixes = $Hotfixes.HotFixID

    #Så er det tid til de sidste definitioner.
    #Dette gemmer de valgte informationer i en variabel, som vi så kan kalde senere i funktionen for at se.

    $Information = [PSCustomObject]@{
        User = $CurrentUser
        Lastlogon = $lastlogontime
        ComputerName = $computersname
        IP_address = $IP
        LastRebootTime = $LastReboot
        BuildNumber = $Buildnumber
        BuildVersion = $BuildVersion
        BuildCaption = $BuildCaption
        InstallDate = $InstallDate
        Hotfixes = $Hotfixes
    }
    #Her kommer output.
    Write-Output $Computer
    Write-Output $Information
    #Og sådan skal det gøres - SMART ;-)
        Exit-PSSession
}

}
    #Tid til at slutte sessionen.

End {
        foreach ($Computer in $Computername) {
            Remove-PSSession -ComputerName $computer
        }
}

}

    #Herunder er samme detaljer, men for den lokale pc.

function get-LocalPCInfo {
    [CmdletBinding(SupportsShouldProcess)]
    
    $computer = 'localhost'

    Foreach ($computername in $Computer) {

    Write-Verbose "$computername"

    $Params = @{

        ClassName = "Win32_ComputerSystem"
        Computer = $Computername
    }

    #Finder brugerens brugernavn og fjerne unødvendige tegn før brugernavnet
    $CurrentUser = Get-CimInstance @Params | Select-Object UserName
    $CurrentUser = $CurrentUser.UserName
    $CurrentUser = $CurrentUser -replace ('.*\\','')


    $lastlogon = Get-CimInstance -ClassName Win32_LoggedOnUser -ComputerName $computername
    $lastlogon = $lastlogon | Where-Object {$_.Antecedent.name -like "*$Currentuser*"}
    $Lastlogon = $Lastlogon | Select-Object {$_.Dependent.LogonID}
    $LastlogonID = $Lastlogon | Select-Object -Unique
    $LastlogonID = $LastlogonID.'$_.Dependent.LogonID'

    $lastlogontime = Get-CimInstance -ClassName "Win32_LogonSession" -ComputerName $computername | Where-Object {$_.LogonID -like "$LastlogonID"} | Select-Object StartTime

    $lastlogontime = $lastlogontime.StartTime
    
    $Params.ClassName = "Win32_NetworkAdapterConfiguration"

    #Finder den aktive ip-adresse og MAC-adresse på maskinen
    $IP = Get-CimInstance @Params -filter "IPEnabled = $true" | Select-Object @{N='IPv4'; E={($_."IPAddress")-split(",")[0]}}
    $IP = $IP.IPv4

    $Params.ClassName = "Win32_OperatingSystem"

    #Finder computerens navn
    $Computersname = Get-CimInstance @Params | Select-Object CSName
    $Computersname = $Computersname.CSName

    #Finder computerens sidste startup tid
    $LastReboot = Get-CimInstance @Params | Select-Object LastBootUpTime
    $LastReboot = $LastReboot.LastBootUpTime
    
    #Finder Windows Buildnummeret
    $Buildnumber = Get-CimInstance @Params | Select-Object BuildNumber
    $Buildnumber = $Buildnumber.BuildNumber

    #Beskriver selve Buildversionen
    $BuildVersion = Get-CimInstance @Params | Select-Object Version
    $BuildVersion = $BuildVersion.Version

    #Beskriver Buildversionen
    $BuildCaption = Get-CimInstance @Params | Select-Object Caption
    $BuildCaption = $BuildCaption.Caption

    #Dato for installation
    $InstallDate = Get-CimInstance  @Params | Select-Object InstallDate
    $InstallDate = $InstallDate.InstallDate

    $Params.ClassName = "Win32_QuickFixEngineering"

    #Finder en liste med de forskellige hotfixes installeret på computeren
    $Hotfixes = Get-CimInstance @Params | Select-Object HotFixID
    $Hotfixes = $Hotfixes.HotFixID


    $Information = [PSCustomObject]@{
        User = $CurrentUser
        Lastlogon = $lastlogontime
        ComputerName = $computersname
        IP_address = $IP
        LastRebootTime = $LastReboot
        BuildNumber = $Buildnumber
        BuildVersion = $BuildVersion
        BuildCaption = $BuildCaption
        InstallDate = $InstallDate
        Hotfixes = $Hotfixes
    }
    Write-Output $Information
}
}