- November 30, 2015
- Posted by: Surender Kumar
- Category: PowerShell
PowerShell Tricks for Windows 10
Table of Contents
Everyone knows the Windows 10 is now available as a free upgrade. In this section, I am going to discuss about some PowerShell tricks that you can use after upgrading your PC to Windows 10.
List the Installed Device Drivers
Device driver is a software that allows your operating system to communicate with other hardware devices, like keyboard, mouse, sound cards, graphics cards, etc. One of the major concern about Windows 10 is its driver compatibility for hardware devices. When a device driver is not compatible with the operating system, the relevant hardware is rendered unusable.
The good news is that you can Windows PowerShell to get the of all of device drivers installed by using Get-WindowsDriver cmdlet. This cmdlet displays the information about driver packages in the online or offline Windows image. Open the elevated Windows PowerShell session and run the following command:
PS D:\MyScripts> Get-WindowsDriver -Online Published Name : oem0.inf Original File Name : C:\Windows\System32\DriverStore\FileRepository\prnms001.inf_amd64_4fa1863520b2418e\prnms001.inf InBox : False Class Name : Printer Boot Critical : False Provider Name : Microsoft Date : 21-06-2006 12:00:00 AM Version : 6.3.9600.16384 Published Name : oem1.inf Original File Name : C:\Windows\System32\DriverStore\FileRepository\e1c64x64.inf_amd64_7a9a6fe10169f82f\e1c64x64.inf InBox : False Class Name : Net Boot Critical : False Provider Name : Intel Date : 21-08-2013 12:00:00 AM Version : 12.10.28.0 Published Name : oem10.inf Original File Name : C:\Windows\System32\DriverStore\FileRepository\klim6.inf_amd64_80872328fa400351\klim6.inf InBox : False Class Name : NetService Boot Critical : False Provider Name : Kaspersky Lab Date : 20-04-2015 12:00:00 AM Version : 8.0.0.94 [output cut]
By default, only third-party drivers are listed by this command. If you want to include default drivers from Microsoft as well, you can add -All parameter to the above command.
PS D:\MyScripts> Get-WindowsDriver -Online -All Published Name : 1394.inf Original File Name : C:\Windows\System32\DriverStore\FileRepository\1394.inf_amd64_ab3552a66c5b80fd\1394.inf InBox : True Class Name : 1394 Boot Critical : True Provider Name : Microsoft Date : 21-06-2006 12:00:00 AM Version : 6.3.9600.16384 Published Name : 3ware.inf Original File Name : C:\Windows\System32\DriverStore\FileRepository\3ware.inf_amd64_408ceed6ec8ab6cd\3ware.inf InBox : True Class Name : SCSIAdapter Boot Critical : True Provider Name : LSI Date : 11-04-2013 12:00:00 AM Version : 5.1.0.51 [output cut]
List and Uninstall Pre-Installed Apps
Like Windows 8, Windows 10 also comes up with a lot of pre-installed apps that can’t be removed by normal users because the uninstall button is grayed out. But you can still get around this issue with the help of Windows PowerShell. Run the Windows PowerShell session with administrator privilege and use Get-AppxPackage cmdlet to list all the apps installed.
PS D:\MyScripts> Get-AppxPackage Name : Microsoft.VCLibs.120.00 Publisher : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US Architecture : X86 ResourceId : Version : 12.0.21005.1 PackageFullName : Microsoft.VCLibs.120.00_12.0.21005.1_x86__8wekyb3d8bbwe InstallLocation : C:\Program Files\WindowsApps\Microsoft.VCLibs.120.00_12.0.21005.1_x86__8wekyb3d8bbwe IsFramework : True PackageFamilyName : Microsoft.VCLibs.120.00_8wekyb3d8bbwe PublisherId : 8wekyb3d8bbwe IsResourcePackage : False IsBundle : False IsDevelopmentMode : False Name : Microsoft.VCLibs.120.00 Publisher : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US Architecture : X64 ResourceId : Version : 12.0.21005.1 PackageFullName : Microsoft.VCLibs.120.00_12.0.21005.1_x64__8wekyb3d8bbwe InstallLocation : C:\Program Files\WindowsApps\Microsoft.VCLibs.120.00_12.0.21005.1_x64__8wekyb3d8bbwe IsFramework : True PackageFamilyName : Microsoft.VCLibs.120.00_8wekyb3d8bbwe PublisherId : 8wekyb3d8bbwe IsResourcePackage : False IsBundle : False IsDevelopmentMode : False [output cut]
By default this command shows all apps installed under your user profile. To get the list of all apps installed across all users, you can include -AllUsers parameter. To make the output further neat, you can use Format-List cmdlet to only list Name and PackageFullName properties as shown below:
PS D:\MyScripts> Get-AppxPackage | Format-List -Property Name, PackageFullName Name : Microsoft.VCLibs.120.00 PackageFullName : Microsoft.VCLibs.120.00_12.0.21005.1_x86__8wekyb3d8bbwe Name : Microsoft.VCLibs.120.00 PackageFullName : Microsoft.VCLibs.120.00_12.0.21005.1_x64__8wekyb3d8bbwe Name : Microsoft.WindowsAlarms PackageFullName : Microsoft.WindowsAlarms_6.3.9654.20335_x64__8wekyb3d8bbwe Name : Microsoft.WindowsCalculator PackageFullName : Microsoft.WindowsCalculator_6.3.9600.20278_x64__8wekyb3d8bbwe Name : Microsoft.WindowsSoundRecorder PackageFullName : Microsoft.WindowsSoundRecorder_6.3.9600.20280_x64__8wekyb3d8bbwe Name : Microsoft.XboxLIVEGames PackageFullName : Microsoft.XboxLIVEGames_2.0.139.0_x64__8wekyb3d8bbwe [output cut]
Note the FullPackageName of all the apps you want to remove. To remove the app, use Remove-AppxPackage <PackageFullName> to uninstall.
Launch Malware Scan
If you do not have any professional anti-virus installed in your PC, you can use inbuilt Windows Defender. I am not saying that Windows Defender is the best, but it gets the job done sometimes. Start the Windows PowerShell session with administrator privilege and use the Start-MpScan cmdlet. The cmdlet support some optional parameters like -ScanType with values QuickScan|FullScan|CustomScan and -ScanPath to provide path of directory to be scanned (C:, D:).
PS D:\MyScripts> Start-MpScan -ScanType QuickScan -ScanPath D:
Manage Windows Clipboard
Windows 10 comes up with Windows PowerShell version 5.0 which adds some cool cmdlets like Get-Clipboard and Set-Clipboard. You can use these cmdlets to view or set the clipboard contents.
PS D:\MyScripts> Get-Clipboard Sample Text Copied PS C:\> "Replacement Text" | Set-Clipboard PS C:\> Get-Clipboard Replacement Text
Bulk Rename
Sometimes you may need to rename multiple files at once. For instance, take a look at the following image:
I have some backup files placed in D:\Backup directory. I want to append the date (when the backup files were generated) at the end of filename without changing file extension. Take a look at Date Modified column marked red, all files have different timestamp.
To rename these files launch the PowerShell console, navigate to D:\Backup directory and Run the following command:
Get-ChildItem | Rename-Item –NewName { $_.BaseName + "_" + $_.LastWriteTime.ToString('ddMMyyyy') + $_.extension }
You will see that all files get renamed exactly the way I needed:
Another Approach
In previous example we saw how to rename files and include their actual creation date in filename. But what if you want to rename all the files and append a custom date to filename? Run the following command:
Get-ChildItem | Rename-Item –NewName { $_.BaseName + "_" + "03112017" + $_.extension }
In above command, 03112017 is today’s date (while article is written) but it can be any text string which will be appended in filename as is.
Gracefully Close Microsoft Outlook
Microsoft Outlook is very popular email client used by many organizations. If your organization uses Outlook, you must be aware of backing up PST (Personal Storage) or OST (Offline Storage) files created by Outlook. While Outlook is running, these files get locked and you cannot simply copy these files. You must close the Outlook before backing-up these files no matter which method you use for backup. You might think of using taskkill command but this can be dangerous. Using Taskkill to close Outlook can corrupt the data file which can cause a lot of trouble.
The best thing is that nowadays every version of Windows comes with PowerShell pre-installed. So, you can create a single-line PowerShell script. Following is the command:
Get-Process Outlook -ErrorAction 0 | Where-Object {$_.CloseMainWindow() | Out-Null}
The benefit of using this method is that it does not end the process forcefully; instead it gracefully exits the Outlook window. The other benefit of using this method is that if any user is writing an email message, he/she will be prompted with 3 options:YES, NO, and CANCEL.
- If user selects YES, the message will be saved to Drafts and Outlook will be Closed.
- If user selects NO, the message will not be saved to Drafts and Outlook will be Closed.
- If user selects CANCEL, the user can continue writing email message and Outlook will not be Closed.
You can use the same command to gracefully close any windows process without having to terminate it forcefully and losing the data.
To learn more about managing Windows processes using PowerShell, read this article.