2024-09-12 23:46:24 +00:00
function Get-DevicesUnplugged {
param (
[ string ] $comp
)
2024-09-18 18:15:13 +00:00
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
2024-09-18 18:15:13 +00:00
$usbi = 0
2024-10-25 22:04:26 +00:00
$friendlyNames = $usb | ForEach-Object {
2024-09-18 18:15:13 +00:00
$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
}
}
2024-09-18 18:15:13 +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
}