# Показ драйверов в системе [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) { $b | Where-Object -Property Count -GT 1 } function OldVers ($c) { $c | ForEach-Object -Process { $_.Group | Sort-Object -Property { [Version] $_.Version } | Select-Object -SkipLast 1 } } function OldDate ($d) { $d | ForEach-Object -Process { $_.Group | Sort-Object -Property { $_.Date } | Select-Object -SkipLast 1 } } $Drivers = Get-WindowsDriver -Online [bool[]]$arr = $ViewGroup,$ViewMoreOne,$ViewOldVersion,$ViewOldDate switch ([convert]::toint32(($bin = -join [int[]]$arr),2)){ "1"{$Grouped = Grouped $Drivers; $MoreOne = MoreOne $Grouped;OldDate $MoreOne;break} "2"{$Grouped = Grouped $Drivers; $MoreOne = MoreOne $Grouped;OldVers $MoreOne;break} "4"{$Grouped = Grouped $Drivers; MoreOne $Grouped;break} "8"{Grouped $Drivers;break} } if ([int]$bin){return} foreach ($item in $Drivers) { if ($item -in $OldVers) { $item | Add-Member -MemberType NoteProperty -Name IsOldVersion -Value $true } else { $item | Add-Member -MemberType NoteProperty -Name IsOldVersion -Value $false } } foreach ($item in $Drivers) { if ($item -in $OldDate) { $item | Add-Member -MemberType NoteProperty -Name IsOldDate -Value $true } else { $item | Add-Member -MemberType NoteProperty -Name IsOldDate -Value $false } } if ($Table) { $Drivers | Sort-Object -Property ClassName, ProviderName, Date | Format-Table -Property Driver, CatalogFile, ClassDescription, ProviderName, Date, Version, BootCritical, IsOldVersion, IsOldDate } else {$Drivers} |