Get-PC/Private/Get-DevicesUnplugged.ps1

58 lines
2.9 KiB
PowerShell
Raw Normal View History

2024-09-12 23:46:24 +00:00
function Get-DevicesUnplugged {
param (
[string]$comp
)
Write-Progress -Activity "Getting devices for $name" -Status 'Collecting USB devices' -PercentComplete 10 -ParentId 1
2024-09-12 23:46:24 +00:00
if ($comp -eq $env:COMPUTERNAME) {
$usb += Get-PnpDevice -Status UNKNOWN | Select-Object @{N="Description";E={$_.FriendlyName}},@{N="DeviceID\SerialNumber";E={$_.InstanceID}} | Add-Member -NotePropertyName Manufacturer -NotePropertyValue 'Unknown' -PassThru
} else {
$usb += Invoke-Command -ComputerName $comp -SessionOption $(New-PSSessionOption -NoMachineProfile) -ScriptBlock {
Get-PnpDevice -Status UNKNOWN | Select-Object @{N="Description";E={$_.FriendlyName}},@{N="DeviceID\SerialNumber";E={$_.InstanceID}} | Add-Member -NotePropertyName Manufacturer -NotePropertyValue 'Unknown' -PassThru
}
}
$usb | Add-Member -NotePropertyName Type -NotePropertyValue USB
$usb | Add-Member -NotePropertyName AttachedComputer -NotePropertyValue $comp
$usbi = 0
2024-10-25 22:04:26 +00:00
$friendlyNames = $usb | ForEach-Object {
$usbi++
2024-10-25 22:04:26 +00:00
Write-Progress -Activity "Getting devices for $name" -Status "Parsing USB Devices ($usbi/$($usb.Length)" -PercentComplete (($usbi * (80-10) / $usb.Length )+10) -ParentId 1
Write-Output $_
} | Select-Object -ExpandProperty 'DeviceID\SerialNumber' | FindUSBDevice
for($usbi = 0; $usbi -lt $usb.Count; $usbi++){
Write-Progress -Activity "Getting devices for $name" -Status "Populating fields ($usbi/$($usb.Length)" -PercentComplete (($usbi * (90-80) / $usb.Length )+80) -ParentId 1
if(!$friendlyNames[$usbi]){ continue }
$usb[$usbi].Manufacturer = $friendlyNames[$usbi].Manufacturer
if($usb[$usbi].Manufacturer.Length -le 5){ continue }
if($usb[$usbi].Manufacturer.Substring(0,5) -eq '[SHS]'){
$usb[$usbi].Type = 'SHS Issued USB'
$len = $usb[$usbi].Manufacturer.Length -1
$usb[$usbi].Manufacturer = $usb[$usbi].Manufacturer[5..$len] -join ''
}
if($friendlyNames[$usbi].Description){
$usb[$usbi].Description = $friendlyNames[$usbi].Description
2024-09-12 23:46:24 +00:00
}
}
Write-Progress -Activity "Getting devices for $name" -Status 'Sorting out duplicate devices' -PercentComplete 90 -ParentId 1
2024-09-12 23:46:24 +00:00
$usb = $usb | Sort-Object Manufacturer,Description
for ($i = 0; $i -lt $usb.Count - 1; $i++) {
if($usb[$i].Manufacturer -eq $usb[$i+1].Manufacturer -and $usb[$i].Description -eq $usb[$i+1].Description){
$usb[$i].Manufacturer = '__DUPE__'
}
}
$usb = $usb | Where-Object -Property Manufacturer -NE '__DUPE__'
$usb = $usb | Sort-Object Type
$out = @()
foreach($item in ($monitors + $usb)){
$item.PSObject.TypeNames.Insert(0,'GetPC.Devices')
$out += $item
}
$item = [PSCustomObject]@{ }
$item.PSObject.TypeNames.Insert(0,'GetPC.Devices')
$out += $item
Write-Output $out
}