Export-OSDrivers.ps1
<#
.LINK https://www.osdeploy.com/psmodule/osdrivers/ .SYNOPSIS Exports an existing OSDrivers Repository to a new one. This can be used for Package Creation .DESCRIPTION Exports an existing OSDrivers Repository to a new one. This can be used for Package Creation .PARAMETER PrimaryOSDrivers The OSDrivers Primary Repository (Source) .PARAMETER SecondaryOSDrivers The new OSDrivers Repository (Destination) .PARAMETER WindowsProfile Select an Operating System for Compatible Drivers to Export .PARAMETER Like Wildcard include for Driver Packages in the PrimaryOSDrivers. eg. *Dell* .PARAMETER NotLike Wildcard exclude for Driver Packages in the PrimaryOSDrivers. eg. *Lenovo* .PARAMETER Subset Filter for Core, Video, and Make Drivers .PARAMETER Visibility Filter for Public and Private Drivers .EXAMPLE Export-OSDrivers -PrimaryOSDrivers D:\OSDrivers -SecondaryOSDrivers "D:\Packages\Win10 x64 Video Nvidia" -WindowsProfile "Win10 x64" -Like *nvidia* -Subset "Only Video" Exports D:\OSDrivers to "D:\Packages\Win10 x64 Video Nvidia" with only Win10 compatible Nvidia Video Drivers. .NOTES NAME: Export-OSDrivers.ps1 AUTHOR: David Segura, david@segura.org BLOG: http://www.osdeploy.com CREATED: 02/18/2018 VERSION: 1.1.0.2 #> function Export-OSDrivers { [CmdletBinding()] Param ( [Parameter(Mandatory=$True)] [string]$PrimaryOSDrivers, [Parameter(Mandatory=$True)] [string]$SecondaryOSDrivers, [Parameter(Mandatory=$True)] [ValidateSet('Win10 x64','Win10 x86','Win7 x64','Win7 x86','All Operating Systems','All x64','All x86')] [string]$WindowsProfile, [string]$Like, [string]$NotLike, [ValidateSet('Only Core','Only Video','Only Dell','Only HP','Only Lenovo')] [string]$Subset, [ValidateSet('Public Files Hidden','Public Files Only','Private Files Hidden','Private Files Only','Public and Private Hidden','Public and Private Only')] [string]$Visibility ) #Get a list of all files in the PrimaryOSDrivers $SourceFiles = Get-ChildItem $PrimaryOSDrivers -File -Recurse #Filter out OSDrivers.vbs $OSDriversVBS = $SourceFiles | Where-Object {$_.name -like 'OSDrivers.vbs'} $SourceFiles = $SourceFiles | Where-Object {$_.name -notlike 'OSDrivers.vbs'} #Filter out the OS and Architecture if ($WindowsProfile -like 'Win10*') {$SourceFiles = $SourceFiles | Where-Object {$_.fullname -notlike '*Win7*'}} if ($WindowsProfile -like 'Win7*') {$SourceFiles = $SourceFiles | Where-Object {$_.fullname -notlike '*Win10*'}} if ($WindowsProfile -like '*x64') {$SourceFiles = $SourceFiles | Where-Object {$_.fullname -notlike '*x86*'}} if ($WindowsProfile -like '*x86') {$SourceFiles = $SourceFiles | Where-Object {$_.fullname -notlike '*x64*'}} #Wildcards if ("$Like" -ne "") {$SourceFiles = $SourceFiles | Where-Object {$_.fullname -like "$Like"}} if ("$NotLike" -ne "") {$SourceFiles = $SourceFiles | Where-Object {$_.fullname -notlike "$NotLike"}} #Subset if ($Subset -eq 'Only Core') {$SourceFiles = $SourceFiles | Where-Object {$_.directoryname -like '*\Core*'}} if ($Subset -eq 'Only Video') {$SourceFiles = $SourceFiles | Where-Object {$_.directoryname -like '*\Video*'}} if ($Subset -eq 'Only Dell') {$SourceFiles = $SourceFiles | Where-Object {$_.directoryname -like '*\Dell*' -or $_.directoryname -like '*\X-Dell*'}} if ($Subset -eq 'Only HP') {$SourceFiles = $SourceFiles | Where-Object {$_.directoryname -like '*\HP*'}} if ($Subset -eq 'Only Lenovo') {$SourceFiles = $SourceFiles | Where-Object {$_.directoryname -like '*\Lenovo*'}} #Visibility if ($Visibility -eq 'Public Files Hidden') {$SourceFiles = $SourceFiles | Where-Object {$_.fullname -notlike "*\Public\*"}} if ($Visibility -eq 'Public Files Only') {$SourceFiles = $SourceFiles | Where-Object {$_.fullname -like "*\Public\*"}} if ($Visibility -eq 'Private Files Hidden') {$SourceFiles = $SourceFiles | Where-Object {$_.fullname -notlike "*\Private\*"}} if ($Visibility -eq 'Private Files Only') {$SourceFiles = $SourceFiles | Where-Object {$_.fullname -like "*\Private\*"}} if ($Visibility -eq 'Public and Private Hidden') {$SourceFiles = $SourceFiles | Where-Object {$_.fullname -notlike "*\Public\*" -and $_.fullname -notlike "*\Private\*"}} if ($Visibility -eq 'Public and Private Only') {$SourceFiles = $SourceFiles | Where-Object {$_.fullname -like "*\Public\*" -or $_.fullname -like "*\Private\*"}} $SourceFiles = $SourceFiles | Select-Object -Property DirectoryName, Name, Length, Extension, CreationTime, LastWriteTime, FullName | Out-GridView -Title "Select files to export and press OK" -PassThru foreach ($file in $SourceFiles) { $NewDir = $file.DirectoryName.Replace($PrimaryOSDrivers, $SecondaryOSDrivers) If (-Not (Test-Path $NewDir)) { md $NewDir } Copy-Item -Path $file.FullName -Destination $NewDir If ($OSDriversVBS -ne $null) { Copy-Item -Path $OSDriversVBS.FullName -Destination $SecondaryOSDrivers } } } |