Learning and Sharing
  • Home
  • Blog
  • Linux
  • macOS
  • Virtualization
    • VMware
    • VirtualBox
  • Windows
    • Windows 11
    • Windows 10
    • Windows Server
  • Series
    • Symantec
    • Intune
    • Microsoft Azure
    • Powershell
    • VirtualBox
    • VMware
    • PowerShell Learning
    • Microsoft Graph
  • More
    • Auto Installation
    • AEC Installation
  • Contact
No Result
View All Result
  • Home
  • Blog
  • Linux
  • macOS
  • Virtualization
    • VMware
    • VirtualBox
  • Windows
    • Windows 11
    • Windows 10
    • Windows Server
  • Series
    • Symantec
    • Intune
    • Microsoft Azure
    • Powershell
    • VirtualBox
    • VMware
    • PowerShell Learning
    • Microsoft Graph
  • More
    • Auto Installation
    • AEC Installation
  • Contact
No Result
View All Result
No Result
View All Result

Get Properties of an Object in PowerShell without using Parentheses?

October 18, 2023
in Blog, Powershell
0
ADVERTISEMENT

Table of Contents

I often find that I have to surround a command in parentheses and then use the property access operator (dot-notation) to get the value of a property. 

For example, If I have the following command and I want to get the Drives property, I will have to surround the whole command in parentheses first:

PS C:\> Get-PSProvider FileSystem

Name                 Capabilities                                      Drives
----                 ------------                                      ------
FileSystem           Filter, ShouldProcess, Credentials                {C, D, P, Z}


PS C:\> (Get-PSProvider FileSystem).Drives

Name           Used (GB)     Free (GB) Provider      Root                              
----           ---------     --------- --------      ----                              
C                 127.13         72.15 FileSystem    C:\
D                  56.54        220.39 FileSystem    D:\
P                 706.10       1341.90 FileSystem    P:\
Z                   0.00      10240.00 FileSystem    \\ExpanDrive\e8psvd7c-1

This is rather annoying since I have to go back to the beginning of the line when I’d rather just keep typing where I am. It is especially annoying when I am in the middle of a larger set of piped commands.

Select Property vs ExpandProperty

If you run the following command, you will see that the output of command is actually an object.

PS C:\> Get-PSProvider FileSystem | Get-Member

   TypeName: System.Management.Automation.ProviderInfo

Name             MemberType Definition
----             ---------- ----------
Equals           Method     bool Equals(System.Object obj)
GetHashCode      Method     int GetHashCode()
GetType          Method     type GetType()
ToString         Method     string ToString()
Capabilities     Property   System.Management.Automation.Provider.Provider...
Description      Property   string Description {get;set;}
Drives           Property   System.Collections.ObjectModel.Collection
HelpFile         Property   string HelpFile {get;}
Home             Property   string Home {get;set;}
ImplementingType Property   type ImplementingType {get;}
Module           Property   psmoduleinfo Module {get;}
ModuleName       Property   string ModuleName {get;}
Name             Property   string Name {get;}
PSSnapIn         Property   System.Management.Automation.PSSnapInInfo...

You can use Select-Object -ExpandProperty <property name>. This can be shortened using the alias select and only typing part of the property name:

Get-PSProvider FileSystem | select -ExpandProperty Drives

#Get-PSProvider FileSystem | select -exp Drives
Name           Used (GB)     Free (GB) Provider      Root                              
----           ---------     --------- --------      ----                              
C                 127.13         72.15 FileSystem    C:\
D                  56.54        220.39 FileSystem    D:\
P                 706.10       1341.90 FileSystem    P:\
Z                   0.00      10240.00 FileSystem    \\ExpanDrive\e8psvd7c-1

But what if you want to pipe the output of Get-PSProvider command into another cmdlet which is expecting a string data type as an input instead of an object? Well, in that case you need to use -ExpandProperty parameter instead of -Property as shown below:

PS C:\>  Get-PSProvider FileSystem | select -exp Drives | select -exp Name | Get-Member

   TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone(), System.Object ICloneable.Clone()
...

The -ExpandProperty is particularly useful when the other cmdlet down the pipeline is expecting a string data type instead of object. The command also shows that there are a whole lot of different methods that you can perform on a string data type that were not possible on an object.

PS C:\>  Get-PSProvider FileSystem | select -ExpandProperty Drives | select -ExpandProperty Name
C
D
P
Z

So, in the end, use of -Property and -ExpandProperty parameters really depend upon what you want to do with the output.

Not a reader? Watch this related video tutorial:

5/5 - (1 vote)
Previous Post

What’s PowerShell Splatting?

Next Post

#21 PowerShell Learning: Understanding Parentheses, Braces and Square Brackets

Related Posts

Running Hyper-V and VMware Workstation on The Same Machine

August 15, 2024

How to Uninstall All Autodesk Products At Once Silently

July 29, 2024
Ftr5

How to Uninstall the Autodesk Genuine Service on Windows

July 29, 2024
Ftr19

How to Fix Windows Cannot Read the ProductKey From the Unattend Answer File in VirtualBox

July 26, 2024
Ftr25

How to Update Windows Terminal in Windows 10/11

July 26, 2024

How to Disable The Beep Sound in WSL Terminal on Windows

July 26, 2024

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • How To Turn On uBlock Origin Extension in Chrome (2025)
  • Images Hidden Due To Mature Content Settings In CivitAI
  • Azure OpenAI vs Azure AI Hub, How to Choose the Right One for Your Needs

Categories

Stay in Touch

Discord Server

Join the Discord server with the site members for all questions and discussions.

Telegram Community

Jump in Telegram server. Ask questions and discuss everything with the site members.

Youtube Channel

Watch more videos, learning and sharing with Leo ❤❤❤. Sharing to be better.

Newsletter

Join the movement and receive our weekly Tech related newsletter. It’s Free.

General

Microsoft Windows

Microsoft Office

VMware

VirtualBox

Technology

PowerShell

Microsoft 365

Microsoft Teams

Email Servers

Copyright 2025 © All rights Reserved. Design by Leo with ❤

No Result
View All Result
  • Home
  • Linux
  • Intune
  • macOS
  • VMware
  • VirtualBox
  • Powershell
  • Windows 10
  • Windows 11
  • Microsoft 365
  • Microsoft Azure
  • Microsoft Office
  • Active Directory

No Result
View All Result
  • Home
  • Linux
  • Intune
  • macOS
  • VMware
  • VirtualBox
  • Powershell
  • Windows 10
  • Windows 11
  • Microsoft 365
  • Microsoft Azure
  • Microsoft Office
  • Active Directory