Powershell – OS Recovery configuration

OS Recovery

To list all properties from OS recovery object, type:

Get-WmiObject Win32_OSRecoveryConfiguration | Select-Object *

To change same of the properties, type:

$osrecoveryconf = Get-WmiObject Win32_OSRecoveryConfiguration
$osrecoveryconf.AutoReboot = [bool]1
$osrecoveryconf.DebugInfoType = [uint32]3

Note: Debug information type values are:

Value Description
0 None
1 Complete memory dump
2 Kernel memory dump
3 Small memory dump


In Depth

Tested With
PowerShell 4.0

Categories: Powershell, WMI | Leave a comment

Powershell – Pagefile configuration

Automatic Pagefile management

Disable AutomaticManagedPagefile
To disable automatic Pagefile managemet, type:

$computersys = Get-WmiObject Win32_ComputerSystem -EnableAllPrivileges
$computersys.AutomaticManagedPagefile = $False

To enable, type::

$computersys = Get-WmiObject Win32_ComputerSystem -EnableAllPrivileges
$computersys.AutomaticManagedPagefile = $True

Change existing Pagefile
To change existing Pagefile configuration, such as initial and maximum, type:

$physicalmem = Get-WmiObject Win32_PhysicalMemory
$pagefile = Get-WmiObject -Query "Select * From Win32_PageFileSetting Where Name='c:\\pagefile.sys'"
$pagefile.InitialSize = [int]($physicalmem.capacity*1.5/1024/1024)
$pagefile.MaximumSize = [int]($physicalmem.capacity*1.5/1024/1024)

Delete and create Pagefile
To delete an existing Pagefile, type:

$pagefile = Get_WmiObject -Query "Select * From Win32_PageFileSetting Where Name='c:\\pagefile.sys'"

To create a new Pagefile, type

Set-WMIInstance -class Win32_PageFileSetting -Arguments @{name="d:\pagefile.sys";InitialSize = 4096;MaximumSize =4096}


In Depth

Tested With
PowerShell 4.0

Categories: Powershell, WMI | Leave a comment

Powershell – Working with devices, partitions and volumes

Windows storage

Disks, partitions and volumes have the following relation:

Let’s focus on every one of them on the following sections.

To list all operating system visible disks type:


You’ll get something like:

Note: If you run Get-Disk without Admin rights you will receive the following error: “Access to a CIM resource was not available to the client”.
If you’re already Admin remember to run powershell console as Administrator or you will receive the same error.
To restrict query results we can pipe the output of Get-Disk to the Where-Object cmdlet.
To get all USB disks you have to type:

Get-Disk | Where-Object –FilterScript [$_.Bustype –Eq “USB”}

Note: ? is alias for Where-Object. So you can type the same command this hay:

Get-Disk | ? –FilterScript [$_.Bustype –Eq “USB”}

To list all system disks type:

Get-Disk | ? IsSystem –eq $True

To clear all partition and volumes from a disk (disk numb 3), type (you will lose all data and the operation can’t be undone):

Clear-Disk 3 -RemoveData

Note: If the disk has a OEM partition in it it’s also necessary to specify the –RemoveOEM parameter

To initialize a disk (disk numb 3) in order to create partitions and volume type:

Initialize-Disk 3

Note: All disks are initialized as GPT (GUID Partition Table) unless you specify differently. To initialize as MBR (Master Boot Record), type:

Initialize-Disk 3 –PartitionStyle MBR

To change disk properties you have to use Set-Disk.
In this case piping the result of the Get-Disk cmdlet and changing all objects (disks) to an online state. Just type:

Get-Disk | ? IsOffline | Set-Disk –IsOffline:$False

To change read-only disk property type:

Get-Disk | ? IsReadOnly | Set-Disk –IsReadOnly:$False

A Disk object can have one or more logical regions called partitions.
To list all partition on all disks, type:


To list all partition of a specific disk (disk numb 3), type:

Get-Partition –DiskNumber 3

To create a new partition (on disk numb 3), type:

New-Partition –DiskNumber 3 –UseMaximumSize -AssignDriveLetter

To list all volumes of a drive letter (drive letter C), type:

Get-Volume –DriveLetter C

To format a volume (drive letter C) with NTFS, type:

Format-Volume –DriveLetter C

The following cmdlet gives to the current session the following drives:
– Windows logical drives, including mapped drives and network shares
– Drives exposed by powershell providers, HKLM, HKCU, Registry drives…
– Drives created with New-PSDrive


Note: Get-PSDrive alias is gdr

Cmdlet used to map a drive to a path.
In this example we create a drive X mapped to folder C:\Scripts:

New-PSDrive -name X -psprovider FileSystem -root c:\scripts

Note: Get-PSDrive alias is ndr or you can use mount

Storage Settings
To see storage setting like disk policy (previously SAN policy), type:


To change a storage setting like new disk policy, type:

Set-StorageSetting –NewDiskPolicy OfflineShared

These are the existing disk policy options:

Policy settings Description
OfflineAll All new disks are left offline by default
OfflineInternal All disks on busses that are detected as internal are left offline as default
OfflineShared All Disks on sharable busses, such as iSCSI, FC, or SAS are left offline by default
OnlineAll All disks are automatically brought online

WMI remains in most cases the primary automation technology for system administration, so Get-WmiObject cmdlet is essential in order to do routine management tasks. And unlike most cmdlets, Get-WmiObject can be run against remote computers.
To obtain information about volumes, type:

Get-WmiObject win32_logicaldisk

To obtain same information remotely but only for drive type 3, type:

Get-WmiObject –query “select * from win32_logicaldisk where drivetype=’3’” –computername “MYSERVERNAME”

The same output data on table format:

gwmi diskpartition –filter “drivetype=’3’” –computername “MYSERVERNAME” | format-table

…most commonly used
To physical disks information use class: win32_logicaldisk class
To see disk partitions information use: win32_diskpartition
To see map of physical disk and partition use class: win32_logicadisktopartition
To see volumes use: win32_volume
To check drives mapped to a computer use: win32_mappedlogicaldisk

In Depth

Tested With
PowerShell 4.0

Categories: Powershell, WMI | Leave a comment

Blog at WordPress.com.