# Показ драйверов в системе [CmdletBinding(DefaultParameterSetName)] param ( [Parameter(ParameterSetName = "ViewGroup")] [switch] $ViewGroup, # сгруппированные по имени файла [Parameter(ParameterSetName = "ViewMoreOne")] [switch] $ViewMoreOne, # для которых есть более одной версии [Parameter(ParameterSetName = "ViewOldVersion")] [switch] $ViewOldVersion, # устаревшие версии [Parameter(ParameterSetName = "ViewOldDate")] [switch] $ViewOldDate, # устаревшей датой [Parameter(ParameterSetName = "Table")] [switch] $Table # все, в виде таблицы, с полями IsOldVersion и IsOldDate ) function Grouped ($a) { $a | Group-Object -Property { ([IO.FileInfo] $_.OriginalFileName).Name } } function MoreOne ($b) { $x = Grouped $b $x | Where-Object -Property Count -GT 1 } function OldVers ($c) { $x = MoreOne $c $x | ForEach-Object -Process { $_.Group | Sort-Object -Property { [Version] $_.Version },{ $_.Date } | Select-Object -SkipLast 1 } } function OldDate ($d) { $x = MoreOne $d $x | ForEach-Object -Process { $_.Group | Sort-Object -Property { $_.Date },{ [Version] $_.Version } | Select-Object -SkipLast 1 } } function Add-PropDrivers ($e) { $x = OldVers $e $y = OldDate $e foreach ($item in $script:Drivers) { if ($item -in $x) { $item | Add-Member -MemberType NoteProperty -Name IsOldVersion -Value $true } else { $item | Add-Member -MemberType NoteProperty -Name IsOldVersion -Value $false } if ($item -in $y) { $item | Add-Member -MemberType NoteProperty -Name IsOldDate -Value $true } else { $item | Add-Member -MemberType NoteProperty -Name IsOldDate -Value $false } } } $Drivers = Get-WindowsDriver -Online [bool[]]$arr = $ViewGroup,$ViewMoreOne,$ViewOldVersion,$ViewOldDate,$Table switch ([convert]::toint32((-join [int[]]$arr),2)){ "0"{ Add-PropDrivers $Drivers; $Drivers; break } "1"{ Add-PropDrivers $Drivers $Drivers | Sort-Object -Property ClassName, ProviderName, Date | Format-Table -Property Driver, CatalogFile, ClassDescription, ProviderName, ` Date, Version, BootCritical, IsOldVersion, IsOldDate break } "2"{OldDate $Drivers;break} "4"{OldVers $Drivers;break} "8"{MoreOne $Drivers;break} "16"{Grouped $Drivers;break} } |