Skip to content

Feature: Add Remove-OldDrivers Script #28

@jimbrig

Description

@jimbrig
<#PSScriptInfo

.VERSION 1.0

.GUID 373d0e75-bee5-4ebe-8dbf-c476e96d5fe1

.AUTHOR jimmy

.COMPANYNAME

.COPYRIGHT

.TAGS

.LICENSEURI

.PROJECTURI

.ICONURI

.EXTERNALMODULEDEPENDENCIES 

.REQUIREDSCRIPTS

.EXTERNALSCRIPTDEPENDENCIES

.RELEASENOTES


.PRIVATEDATA

#>

<# 

.DESCRIPTION 
 Delete unused drivers 

#> 
Param(
    [Parameter()]
    [switch]$WhatIf
)

$ErrorActionPreference = "Stop"

$Drivers = Get-WindowsDriver -Online -All | Where-Object -FilterScript {$_.Driver -like 'oem*inf'} | Select-Object -Property Driver, ClassDescription, ProviderName, Date, Version

$OriginalFileName = @{
	Name = "OriginalFileName"
	Expression = {$_.OriginalFileName | Split-Path -Leaf}
}
$Date = @{
	Name = "Date"
	Expression = {$_.Date.Tostring().Split("")[0]}
}
$AllDrivers = Get-WindowsDriver -Online -All | Where-Object -FilterScript {$_.Driver -like 'oem*inf'} | Select-Object -Property $OriginalFileName, Driver, ClassDescription, ProviderName, $Date, Version

Write-Verbose "`nAll installed third-party drivers" -Verbose
($AllDrivers | Sort-Object -Property ClassDescription | Format-Table -AutoSize -Wrap | Out-String).Trim()
$DriverGroups = $AllDrivers | Group-Object -Property OriginalFileName | Where-Object -FilterScript {$_.Count -gt 1}

Write-Verbose "`nDuplicate drivers" -Verbose
($DriverGroups | ForEach-Object -Process {$_.Group | Sort-Object -Property Date -Descending | Select-Object -Skip 1} | Format-Table | Out-String).Trim()
$DriversToRemove = $DriverGroups | ForEach-Object -Process {$_.Group | Sort-Object -Property Date -Descending | Select-Object -Skip 1}

Write-Verbose "`nDrivers to remove" -Verbose
($DriversToRemove | Sort-Object -Property ClassDescription | Format-Table | Out-String).Trim()

If ($WhatIf)
{
    Write-Verbose "`nWhatIf switch is set. No drivers will be removed" -Verbose
    Exit
} else {
    Write-Verbose "`nWhatIf switch is not set. Drivers will be removed" -Verbose
    ForEach ($item in $DriversToRemove) {
	$Name = $($item.Driver).Trim()
	& pnputil.exe /delete-driver "$Name" /force
    }
}

Metadata

Metadata

Assignees

Labels

featureNew enhancements and features.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions