Diversity is a wonderful thing. So many different experiences leads us to
look at the same thing in so many different ways. I just had a simple, yet really good question
in my PowerShell class.
“What is the difference between $PSItem and $PSItem.something?”
Good question. We are
currently studying the PowerShell Pipeline.
As a result, we are looking at $_
and $PSItem. These two automatic variables represent
the current object in the PowerShell pipeline.
If you look at the PowerShell help file About_Automatic_Variables you will see this:
$_
Same as $PSItem.
Contains the current object in the pipeline object.
You can use this
variable in commands that perform an action on every
object or on selected
objects in a pipeline.
I tend to use $_ because
it is shorter and most of my content needs to fit nicely in a book or in a blog
post. Let’s look at an object that we
will place in the PowerShell pipeline.
PS Variable:\> Get-Date | Get-Member -MemberType
Properties
TypeName:
System.DateTime
Name MemberType Definition ----
---------- ---------- DisplayHint NoteProperty
DisplayHintType DisplayHint=DateTime Date
Property datetime Date
{get;} Day
Property int Day {get;} DayOfWeek
Property System.DayOfWeek
DayOfWeek {get;} DayOfYear
Property int DayOfYear
{get;} Hour
Property int Hour
{get;} Kind
Property System.DateTimeKind
Kind {get;} Millisecond Property
int Millisecond {get;} Minute
Property int Minute
{get;} Month
Property int Month
{get;} Second
Property int Second
{get;} Ticks
Property long Ticks
{get;} TimeOfDay
Property timespan TimeOfDay
{get;} Year
Property int Year
{get;} DateTime
ScriptProperty System.Object DateTime {get=if ((& { Set-StrictMode
-Version 1; $this.DisplayHint }) -ieq
"Date")...
This object has several members. This first example will show you the results
of using just $PSItem
PS C:\> Get-Date | ForEach-Object { $PSItem }
Tuesday, July 12, 2016 1:15:22 PM
This second example will show you the result of using $PSItem.DayOfYear
PS C:\> Get-Date | ForEach-Object { $PSItem.DayOfYear }
194
This third example involves a method of the object.
PS Variable:\> Get-Date | ForEach-Object {
$PSItem.AddDays(10) }
Friday, July 22, 2016 2:59:56 PM
See the difference? When you reference $PSItem,
you are referencing the entire object.
When you add the name of a property or the name of a method of the
object to $PSItem, you are asking
for the value of that property or for that method to execute.
Comments