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 } } |