Downloading the Latest Dell Driver Packs with PowerShell

It was a regular Tuesday morning and I hadn’t yet had my ‘PowerShell fix’ for the week, so when I realised I needed to download a new driver pack from Dell for my ConfigMgr OS deployments, I could hear a faint voice calling out to me: ‘Dude, I can make your life easier! Work smarter, not harder!

Of course, that’s only ever partially true, because with PowerShell you must work harder today in order to work smarter tomorrow, but in the interest of long-term benefit I proceeded to fire up the ISE.

Suddenly, a thought arose from my subconscious: ‘Wait just a second. Don’t re-invent the wheel.  Aren’t there already some good solutions out there for this?

Well yes, that’s true,‘ my internal musings continued. ‘Most notably, we have a very cool tool by Maurice Daly – the Driver Automation Tool. With this we can just click buttons and go get coffee while the tool does all the hard work. It’ll even import the driver packs into SCCM. I like that!

Yes that is awesome.‘ I responded to myself, ‘Problem is, I still need a PowerShell fix. So maybe I can find a different way of downloading driver packs. What do you suggest?

Well, we have the Dell Driver Pack Catalog. Dell even provide examples of how to use that with PowerShell to find the URLs you need to download the relevant cab files.

Yes, this is cool too. But I think there is still another way. Doesn’t Dell’s TechCenter wiki contain the download URLs for the most recent driver packs?

Yes, it does. But you want to use PowerShell, right?

Correct.’

So what are you thinking?

Web-scraping.

Ah, you bad boy! Let’s do it!

Dell maintains a wiki page containing links to the latest driver packs which can be found here:

http://en.community.dell.com/techcenter/enterprise-client/w/wiki/2065.dell-command-deploy-driver-packs-for-enterprise-client-os-deployment

You simply find the model and operating system version you want and click the link, which leads you to another wiki page containing a download URL.

Rolling up the sleeves, I whipped up some code that will scrape these web pages to find the download URL for the current driver pack version and download it using a BITS transfer. You can then import or add the driver pack into ConfigMgr for OSD using your favourite method (which is PowerShell, right?!)

The resulting script is quite simple to use and works reliably in my testing, although it takes a few seconds to filter the HTML in order to find the appropriate download URL.

You can download a driver pack for a single model, for example:


Download-LatestDellDriverPack -Model "Latitude E7470" -OperatingSystem 'Windows 10' -DownloadDirectory C:\DriverPacks -Verbose

Just provide the model name, operating system version and a location to save the downloaded file to. Support is provided for verbose output.

You can also pass a list of models to the script and it will download each one in turn, for example:


"M4800","Optiplex 9020","E6420","E5250" | Download-LatestDellDriverPack -OperatingSystem 'Windows 7' -DownloadDirectory C:\DriverPacks -Verbose

drivers
The script in action

The script will work for any driver pack with an operating system Windows 7 or higher (are you really deploying anything older than that?!), and there is no proxy support currently.

Here’s the full script:

Get the Total Size of All Application Content Files in an SCCM Console Folder

Today I was installing a new ConfigMgr distribution point on a remote site and wanted to start distributing packages to it.  But since the network bandwidth is only 4Mbps to that site, rather than distribute all the required packages in one go I wanted to distribute groups of packages out of working hours when the network is more free and no-one is affected. Yes you can use bandwidth throttling on the distribution point, but I prefer to schedule my distributions out of hours so I don’t need to.

But to find out what time-frame is required to distribute my packages, I need to get an idea of how long a package distribution will take.  To do this, I use a script I published in an earlier blog (actually an updated version I haven’t published yet!) that will allow me to schedule and monitor a package distribution in SCCM, and will send me an email when the distribution is complete telling me how big the package is and how long the distribution took.  This will enable me to get a rough calculation of the amount of time needed to distribute packages, assuming I know the volume of data I need to distribute.

CaptureSo based on the time taken by this boot image, I can distribute 300MB in 20 minutes, so just less than 1GB per hour.  Of course, several factors can affect that time, but it gives a rough guide which is useful enough.

But now how do I find out the volume of data I need to distribute?  Well, lets start with the Application content packages.  I like to organise my Applications into subfolders in the SCCM console, and I have some scripts that will distribute all the packages in the console folder I choose.

Capture

Let’s choose the ‘Non-Default Apps’ folder.  This contains Applications that are not part of our default deployment image.  How do I find out the total size of all the content files in each application in that folder?

Ok, well let’s use some PowerShell 🙂  First, I need to get the ID of that console folder.

$server = "sccmsrv-01"
$SiteCode = "ABC"
$FolderName = "Non-Default Apps" # Applications\Non-Default Apps

# Get FolderID
Write-Host "Getting FolderID of Console Folder '$FolderName'"
$FolderID = Get-WmiObject -Namespace "ROOT\SMS\Site_$SiteCode" `
-Query "select * from SMS_ObjectContainerNode where Name='$FolderName'" | Select ContainerNodeID
$FolderID = $FolderID.ContainerNodeID
Write-host "  $FolderID"

I have entered my SCCM site server name, site code, and the name of the console folder as variables so the script is portable.  Then I query the WMI on the site server to get the ContainerNodeID of the console folder.

Capture

Now I can query for all Applications in that folder using the FolderID, and get the unique ID, or ‘InstanceKey’ of each one, which equates to the CI Unique ID value for the Application in the SCCM console.  You can add that value in the console from the available fields.

# Get InstanceKey of Folder Members
Write-Host "Getting Members of Folder"
$FolderMembers = Get-WmiObject -Namespace "ROOT\SMS\Site_$SiteCode" `
-Query "select * from SMS_ObjectContainerItem where ContainerNodeID='$FolderID'" | Select InstanceKey
$FolderMembers = $FolderMembers.InstanceKey
write-host "  Found $($FolderMembers.Count) applications"

Capture

Cool, it’s found 21 Applications in that folder.  Now we need to translate the Unique ID of each Application to its friendly name.  There’s more than one way to do that, but I chose to use the SMS_ObjectName class:

# Get Application name of each Folder member
write-host "Getting Application Names"
$NameList = @()
foreach ($foldermember in $foldermembers)
    {
        $Name = Get-wmiobject -Namespace "ROOT\SMS\Site_$SiteCode" -Query "select Name from SMS_ObjectName where ObjectKey='$foldermember'" | Select -ExpandProperty Name
        $NameList += $Name
    }
$namelist = $NameList | sort

Now that we have the list of Applications we need to find out the size of the content files in the deployment types for each Application.  The slightly annoying thing is that this information is serialized into xml format and stored in a property called SDMPackageXML, so we need to deserialize that property.

First we will import a .Net assembly and add an accelerator to perform deserialization.

# import assemblies
[System.Reflection.Assembly]::LoadFrom(“C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\Microsoft.ConfigurationManagement.ApplicationManagement.dll”) | Out-Null

# Creating Type Accelerators
$accelerators = [PSObject].Assembly.GetType('System.Management.Automation.TypeAccelerators')
$accelerators::Add('SccmSerializer',[type]'Microsoft.ConfigurationManagement.ApplicationManagement.Serialization.SccmSerializer')

Now we can loop through each Application, deserialize the SDMPackageXML property, loop through each deployment type that might be present, and retrieve the size of each file in the contents of each deployment type, adding the size values together as we go and storing them in a variable.

# Deserialize each SDMPackageXML property, and get the file size of each file in the contents for each deployment type
$totalsize = 0
foreach ($name in $namelist)
    {
        write-host "  Deserializing $name"
        $app = [wmi](gwmi -ComputerName $server -Namespace root\sms\site_$code -class sms_application | ?{$_.LocalizedDisplayName -eq $Name -and $_.IsLatest -eq $true}).__Path
        $appXML = [SccmSerializer]::DeserializeFromString($app.SDMPackageXML,$true)
        $DTs = $appxml.DeploymentTypes
        foreach ($DT in $DTs)
            {
                $sizes = $dt.Installer.Contents.Files.Size
                foreach ($size in $sizes)
                    {$totalsize = $totalsize + $size}
            }
    }

Now let’s output the results:

write-host "Total Size of all content files for every application in the '$FolderName' folder is:" -ForegroundColor Green
write-host "$(($totalsize / 1GB).ToString(".00")) GB" -ForegroundColor Green

Capture

So based on my initial test, it could take around 15 hours to distribute 13.4 GB of data!  Wow, better schedule it for the weekend!

Here is the full script:

<#

This script gets the total size of all the content files for each deployment type for each application in the console folder you specify.

#>

$server = "sccmsrv-01"
$SiteCode = "ABC"
$FolderName = "Non-Default Apps" # Applications\Default Apps

# import assemblies
[System.Reflection.Assembly]::LoadFrom(“C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\Microsoft.ConfigurationManagement.ApplicationManagement.dll”) | Out-Null

# Creating Type Accelerators
$accelerators = [PSObject].Assembly.GetType('System.Management.Automation.TypeAccelerators')
$accelerators::Add('SccmSerializer',[type]'Microsoft.ConfigurationManagement.ApplicationManagement.Serialization.SccmSerializer')

# Get FolderID
Write-Host "Getting FolderID of Console Folder '$FolderName'"
$FolderID = Get-WmiObject -Namespace "ROOT\SMS\Site_$SiteCode" `
-Query "select * from SMS_ObjectContainerNode where Name='$FolderName'" | Select ContainerNodeID
$FolderID = $FolderID.ContainerNodeID
Write-host "  $FolderID"

# Get InstanceKey of Folder Members
Write-Host "Getting Members of Folder"
$FolderMembers = Get-WmiObject -Namespace "ROOT\SMS\Site_$SiteCode" `
-Query "select * from SMS_ObjectContainerItem where ContainerNodeID='$FolderID'" | Select * | Select InstanceKey
$FolderMembers = $FolderMembers.InstanceKey
write-host "  Found $($FolderMembers.Count) applications"

# Get Application name of each Folder member
write-host "Getting Application Names"
$NameList = @()
foreach ($foldermember in $foldermembers)
    {
        $Name = Get-wmiobject -Namespace "ROOT\SMS\Site_$SiteCode" -Query "select Name from SMS_ObjectName where ObjectKey='$foldermember'" | Select -ExpandProperty Name
        $NameList += $Name
    }
$namelist = $NameList | sort

# Deserialize each SDMPackageXML property, and get the file size of each file in the contents for each deployment type
$totalsize = 0
foreach ($name in $namelist)
    {
        write-host "  Deserializing $name"
        $app = [wmi](gwmi -ComputerName $server -Namespace root\sms\site_$code -class sms_application | ?{$_.LocalizedDisplayName -eq $Name -and $_.IsLatest -eq $true}).__Path
        $appXML = [SccmSerializer]::DeserializeFromString($app.SDMPackageXML,$true)
        $DTs = $appxml.DeploymentTypes
        foreach ($DT in $DTs)
            {
                $sizes = $dt.Installer.Contents.Files.Size
                foreach ($size in $sizes)
                    {$totalsize = $totalsize + $size}
            }
    }

write-host "Total Size of all content files for every application in the '$FolderName' folder is:" -ForegroundColor Green
write-host "$(($totalsize / 1GB).ToString(".00")) GB" -ForegroundColor Green

And here is a script I use to distribute all the packages in a console folder to a single distribution point:

$DP = "sccmsrvdp-02v.contoso.com"
$SiteCode = "ABC"
$FolderName = "Default Apps" # Applications\Default Apps

Write-Host "Getting FolderID of Console Folder '$FolderName'"
$FolderID = Get-WmiObject -Namespace "ROOT\SMS\Site_$SiteCode" `
-Query "select * from SMS_ObjectContainerNode where Name='$FolderName'" | Select ContainerNodeID
$FolderID = $FolderID.ContainerNodeID
Write-host "  $FolderID"

Write-Host "Getting Members of Folder"
$FolderMembers = Get-WmiObject -Namespace "ROOT\SMS\Site_$SiteCode" `
-Query "select * from SMS_ObjectContainerItem where ContainerNodeID='$FolderID'" | Select InstanceKey
$FolderMembers = $FolderMembers.InstanceKey

write-host "Getting App Names"
foreach ($Folder in $FolderMembers)
{
$App = Get-WmiObject -Namespace "ROOT\SMS\Site_$SiteCode" `
-Query "select * from SMS_Application where ModelName='$Folder'" | Select LocalizedDisplayName
$App = $App.LocalizedDisplayName
Write-host "Distributing content for $App to $DP"
Start-CMContentDistribution -ApplicationName $App -DistributionPointName $DP
}

You can distribute any kind of package this way, for example to distribute driver packages instead, query the SMS_DriverPackage class. Replace the last section of the script with:

write-host "Getting DriverPack Names"
foreach ($Folder in $FolderMembers)
{
$DriverPack = Get-WmiObject -Namespace "ROOT\SMS\Site_$SiteCode" `
-Query "select * from SMS_DriverPackage where PackageID='$Folder'" | Select Name
$DriverPack = $DriverPack.Name
Write-host "Distributing content for $DriverPack to $DP"
Start-CMContentDistribution -DriverPackageName $DriverPack -DistributionPointName $DP
}

Installing Drivers with Standalone Media Deployments

Using SCCM standalone media can be a good way to deploy an OS when you have, for example, remote offices with no local distribution point.  However, if you use DVD media it can result in several DVDs if you include all the applications and drivers.  So I prefer to install the drivers and applications separately after deployment and keep the OS install on one or two DVDs. As we use Dell computers, it’s quite easy to get hold of the driver pack from the Dell website, which you can then install using PnPUnattend.  To speed up the process, I wrote a simple batch script that will download the relevant driver pack from Dell and install it.

This process can also be used for non-Dell models, you simply download the drivers you need, extract them, place them in the C:\Drivers folder, add the registry key, and run the PnPUnattend command.

Note: You need to have at least a NIC driver installed before running the script, so you can connect to the internet.

@echo off
cls
:Start
echo *********************************
echo Download and Install Dell Drivers
echo *********************************
echo _
echo 1. E4200
echo 2. E6220
echo 3. E6320
echo 4. E6410
echo 5. E6420
echo 6. E6430
echo 7. E6430s
echo 8. E6530
echo 9. Optiplex 9010
echo 10. Optiplex 9020
echo 11. Precision T5500
echo 12. E7240
echo 13. E7440
echo 14. E6440
echo 15. E6540
echo 16. E6230
echo 17. E6520
echo 18. Optiplex 990
echo _
set /p choice=Which Model do you wish to install Drivers for?
if '%choice%'=='1' goto E4200
if '%choice%'=='2' goto E6220
if '%choice%'=='3' goto E6320
if '%choice%'=='4' goto E6410
if '%choice%'=='5' goto E6420
if '%choice%'=='6' goto E6430
if '%choice%'=='7' goto E6430s
if '%choice%'=='8' goto E6530
if '%choice%'=='9' goto 9010
if '%choice%'=='10' goto 9020
if '%choice%'=='11' goto T5500
if '%choice%'=='12' goto E7240
if '%choice%'=='13' goto E7440
if '%choice%'=='14' goto E6440
if '%choice%'=='15' goto E6540
if '%choice%'=='16' goto E6230
if '%choice%'=='17' goto E6520
if '%choice%'=='18' goto 990
cls
echo !! "%choice%" is not a valid choice! Please try again"!
echo _
goto Start

mkdir C:\DriverPacks
mkdir C:\Drivers

:E4200

echo Downloading Driver cab from Dell for E4200...
echo _
start /wait bitsadmin /transfer E4200Drivers /download /priority normal http://downloads.dell.com/FOLDER00680122M/1/E4200-win7-A03-M90D4.CAB C:\DriverPacks\E4200-win7-A03-M90D4.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E4200-win7-A03-M90D4.CAB -f:* C:\Drivers
goto Install_Drivers

:E6220

echo Downloading Driver cab from Dell for E6220...
echo _
start /wait bitsadmin /transfer E6220Drivers /download /priority normal http://downloads.dell.com/FOLDER01449232M/1/E6220-win7-A08-0VK93.CAB C:\DriverPacks\E6220-win7-A08-0VK93.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E6220-win7-A08-0VK93.CAB -f:* C:\Drivers
goto Install_Drivers

:E6320

echo Downloading Driver cab from Dell for E6320...
echo _
start /wait bitsadmin /transfer E6320Drivers /download /priority normal http://downloads.dell.com/FOLDER01440819M/1/E6320-win7-A10-2H76N.CAB C:\DriverPacks\E6320-win7-A10-2H76N.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E6320-win7-A10-2H76N.CAB -f:* C:\Drivers
goto Install_Drivers

:E6410

echo Downloading Driver cab from Dell for E6410...
echo _
start /wait bitsadmin /transfer E6410Drivers /download /priority normal http://downloads.dell.com/FOLDER01384339M/1/E6410-win7-A11-D2H6P.CAB C:\DriverPacks\E6410-win7-A11-D2H6P.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E6410-win7-A11-D2H6P.CAB -f:* C:\Drivers
goto Install_Drivers

:E6420

echo Downloading Driver cab from Dell for E6420...
echo _
start /wait bitsadmin /transfer E6420Drivers /download /priority normal http://downloads.dell.com/FOLDER01440751M/1/E6420-win7-A10-KFNW7.CAB C:\DriverPacks\E6420-win7-A10-KFNW7.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E6420-win7-A10-KFNW7.CAB -f:* C:\Drivers
goto Install_Drivers

:E6430

echo Downloading Driver cab from Dell for E6430...
echo _
start /wait bitsadmin /transfer E6430Drivers /download /priority normal http://downloads.dell.com/FOLDER01659570M/1/E6430-win7-A07-KGR03.CAB C:\DriverPacks\E6430-win7-A07-KGR03.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E6430-win7-A07-KGR03.CAB -f:* C:\Drivers
goto Install_Drivers

:E6430s

echo Downloading Driver cab from Dell for E6430s...
echo _
start /wait bitsadmin /transfer E6430SDrivers /download /priority normal http://downloads.dell.com/FOLDER01675322M/1/E6430s-win7-A05-GY4MD.CAB C:\DriverPacks\E6430s-win7-A05-GY4MD.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E6430s-win7-A05-GY4MD.CAB -f:* C:\Drivers
goto Install_Drivers

:E6530

echo Downloading Driver cab from Dell for E6530...
echo _
start /wait bitsadmin /transfer E6530Drivers /download /priority normal http://downloads.dell.com/FOLDER01658654M/1/E6530-win7-A08-MK7V1.CAB C:\DriverPacks\E6530-win7-A08-MK7V1.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E6530-win7-A08-MK7V1.CAB -f:* C:\Drivers
goto Install_Drivers

:9010

echo Downloading Driver cab from Dell for Optiplex 9010...
echo _
start /wait bitsadmin /transfer 9010Drivers /download /priority normal http://downloads.dell.com/FOLDER01566211M/1/9010-win7-A05-X8DTY.CAB C:\DriverPacks\9010-win7-A05-X8DTY.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\9010-win7-A05-X8DTY.CAB -f:* C:\Drivers
goto Install_Drivers

:9020

echo Downloading Driver cab from Dell for Optiplex 9020...
echo _
start /wait bitsadmin /transfer 9020Drivers /download /priority normal http://downloads.dell.com/FOLDER01764360M/1/9020-win7-A01-4CG9T.CAB C:\DriverPacks\9020-win7-A01-4CG9T.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\9020-win7-A01-4CG9T.CAB -f:* C:\Drivers
goto Install_Drivers

:T5500

echo Downloading Driver cab from Dell for T5500...
echo _
start /wait bitsadmin /transfer T5500Drivers /download /priority normal http://downloads.dell.com/sysman/T5500-Win7-A00-R253041.CAB C:\DriverPacks\T5500-Win7-A00-R253041.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\T5500-Win7-A00-R253041.CAB -f:* C:\Drivers
goto Install_Drivers

:E7240

echo Downloading Driver cab from Dell for E7240...
echo _
start /wait bitsadmin /transfer E7240Drivers /download /priority normal http://downloads-us.dell.com/FOLDER01819337M/1/E7240-win7-A01-XK9P3.CAB C:\DriverPacks\E7240-win7-A01-XK9P3.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E7240-win7-A01-XK9P3.CAB -f:* C:\Drivers
goto Install_Drivers

:E7440

echo Downloading Driver cab from Dell for E7440...
echo _
start /wait bitsadmin /transfer E7440Drivers /download /priority normal http://downloads-us.dell.com/FOLDER01819350M/1/E7440-win7-A01-XT5VG.CAB C:\DriverPacks\E7440-win7-A01-XT5VG.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E7440-win7-A01-XT5VG.CAB -f:* C:\Drivers
goto Install_Drivers

:E6440

echo Downloading Driver cab from Dell for E6440...
echo _
start /wait bitsadmin /transfer E6440Drivers /download /priority normal http://downloads-us.dell.com/FOLDER01832732M/1/E6440-win7-A01-5DDKN.CAB C:\DriverPacks\E6440-win7-A01-5DDKN.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E6440-win7-A01-5DDKN.CAB -f:* C:\Drivers
goto Install_Drivers

:E6540

echo Downloading Driver cab from Dell for E6540...
echo _
start /wait bitsadmin /transfer E6540Drivers /download /priority normal http://downloads-us.dell.com/FOLDER01832723M/1/E6540-win7-A02-JF7Y8.CAB C:\DriverPacks\E6540-win7-A02-JF7Y8.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E6540-win7-A02-JF7Y8.CAB -f:* C:\Drivers
goto Install_Drivers

:E6230

echo Downloading Driver cab from Dell for E6230...
echo _
start /wait bitsadmin /transfer E6230Drivers /download /priority normal http://downloads-us.dell.com/FOLDER01692655M/1/E6230-win7-A05-7D8JC.CAB C:\DriverPacks\E6230-win7-A05-7D8JC.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E6230-win7-A05-7D8JC.CAB -f:* C:\Drivers
goto Install_Drivers

:E6520

echo Downloading Driver cab from Dell for E6520...
echo _
start /wait bitsadmin /transfer E6520Drivers /download /priority normal http://downloads-us.dell.com/FOLDER01819787M/1/E6520-win7-A10-P2X6K.CAB C:\DriverPacks\E6520-win7-A10-P2X6K.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\E6520-win7-A10-P2X6K.CAB -f:* C:\Drivers
goto Install_Drivers

:990

echo Downloading Driver cab from Dell for Optiplex 990...
echo _
start /wait bitsadmin /transfer 990Drivers /download /priority normal http://downloads.dell.com/FOLDER01834164M/1/990-win7-A09-6DHG2.CAB C:\DriverPacks\990-win7-A09-6DHG2.CAB
echo _
echo Expanding Cab file...
echo _
start /wait expand C:\DriverPacks\990-win7-A09-6DHG2.CAB -f:* C:\Drivers
goto Install_Drivers

:Install_Drivers

echo _
echo Configuring Registry..
echo _
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\UnattendSettings\PnPUnattend\DriverPaths\1" /v Path /t REG_SZ /d "C:\Drivers"
echo _
Echo Initiating PNP driver installation...
echo _
start /wait C:\Windows\System32\pnpunattend.exe auditsystem /l
goto End
:End

rmdir C:\DriverPacks /S /Q
rmdir C:\Drivers /S /Q

pause