farag
18-07-2017, 16:48
$data = & dism /online /get-drivers /format:table | select -Skip 12
$Headers = @( ($data | select -First 1).ToString().Split('|') | %{$_.Trim()} )
$HashTable = $data | select -Skip 2 |
ConvertFrom-Csv -Delimiter '|' -Header $Headers |
select @{n='FileName';e={$_."$($Headers[1])"}},
@{n='Class';e={$_."$($Headers[3])"}},
@{n='Vendor';e={$_."$($Headers[4])"}},
@{n='Date';e={[datetime]::Parse($_."$($Headers[5])")}},
@{n='Version';e={$_."$($Headers[6])"}}
Write-Host "All installed third-party drivers"
$HashTable | sort Filename | ft
Write-Host "Different versions"
$last = ''
$NotUnique = @()
foreach ( $Dr in $($HashTable | sort Filename) ) {
if ($Dr.FileName -eq $last ) { $NotUnique += $Dr }
$last = $Dr.FileName
}
$NotUnique | sort FileName | ft
Write-Host "Outdated drivers"
$list = $NotUnique | select -ExpandProperty FileName -Unique
$ToDel = @()
foreach ( $Dr in $list ) {
Write-Host "Duplicate found"
$sel = $HashTable | where { $_.FileName -eq $Dr } | sort date -Descending | select -Skip 1
$sel | ft
$ToDel += $sel
}
Write-Host "Drivers to remove"
$ToDel | ft
foreach ( $item in $ToDel ) {
$Name = $($item.Name).Trim()
Write-Host "deleting $Name"
Write-Host "pnputil.exe -d $Name"
Invoke-Expression -Command "pnputil.exe -d $Name"
}
Имеется скрипт удаления старых драйверов. Функция удаления почему-то не "очень удаляет", выдавая
Невозможно вызвать метод для выражения со значением NULL.
строка:34 знак:19
+ $FileName = $($item.Name).Trim()
+ ~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
$Headers = @( ($data | select -First 1).ToString().Split('|') | %{$_.Trim()} )
$HashTable = $data | select -Skip 2 |
ConvertFrom-Csv -Delimiter '|' -Header $Headers |
select @{n='FileName';e={$_."$($Headers[1])"}},
@{n='Class';e={$_."$($Headers[3])"}},
@{n='Vendor';e={$_."$($Headers[4])"}},
@{n='Date';e={[datetime]::Parse($_."$($Headers[5])")}},
@{n='Version';e={$_."$($Headers[6])"}}
Write-Host "All installed third-party drivers"
$HashTable | sort Filename | ft
Write-Host "Different versions"
$last = ''
$NotUnique = @()
foreach ( $Dr in $($HashTable | sort Filename) ) {
if ($Dr.FileName -eq $last ) { $NotUnique += $Dr }
$last = $Dr.FileName
}
$NotUnique | sort FileName | ft
Write-Host "Outdated drivers"
$list = $NotUnique | select -ExpandProperty FileName -Unique
$ToDel = @()
foreach ( $Dr in $list ) {
Write-Host "Duplicate found"
$sel = $HashTable | where { $_.FileName -eq $Dr } | sort date -Descending | select -Skip 1
$sel | ft
$ToDel += $sel
}
Write-Host "Drivers to remove"
$ToDel | ft
foreach ( $item in $ToDel ) {
$Name = $($item.Name).Trim()
Write-Host "deleting $Name"
Write-Host "pnputil.exe -d $Name"
Invoke-Expression -Command "pnputil.exe -d $Name"
}
Имеется скрипт удаления старых драйверов. Функция удаления почему-то не "очень удаляет", выдавая
Невозможно вызвать метод для выражения со значением NULL.
строка:34 знак:19
+ $FileName = $($item.Name).Trim()
+ ~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull