Skip to content

Feature: Add Remove-OldDrivers Script #28

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
    }
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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