This is part 7 of my series of the most common PowerShell
errors that are made in my PowerShell classes. 
I will be posting one a day to help you understand why an error occurred
and what the error’s meaning is.
Today’s error: The "Expression" key has a type,
System.Int32, that is not valid
Here is our starting code:
Get-CimInstance -ClassName Win32_LogicalDisk
|
    Select-Object
-Property @{
        Name="FreeSpaceGB"
        Expression =
$_.FreeSpace/1GB
        } 
And here is the full error:
Select-Object : The "Expression" key has a type,
System.Int32, that is not 
valid; expected types are {System.String, 
System.Management.Automation.ScriptBlock}.
At line:2 char:5
+     Select-Object -Property
@{
+    
~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:)
[Select-Object], NotSupport 
   edException
    + FullyQualifiedErrorId :
DictionaryKeyIllegalValue1,Microsoft.PowerShell. 
  
Commands.SelectObjectCommand 
Resolution: 
Use proper syntax when created a custom property.
This is a relatively easy fix, but the error message does
not reflect this.  Take a look at example
#4 of the help file for Select-Object.
     -------------------------- EXAMPLE 4
--------------------------
    PS C:\>Get-process
| Select-Object -Property ProcessName,@{Name="Start Day"; Expression
= {$_.StartTime.DayOfWeek}}
    ProcessName  StartDay
    ----         --------
    alg          Wednesday
    ati2evxx     Wednesday
    ati2evxx     Thursday
    ... 
Notice that the Expression
has its own script block.  In other
words, our code is missing a set of {} for the expression.  The expression can be multiple lines of code
if needed to calculate your expression. 
Take a look at our code now.
Get-CimInstance -ClassName Win32_LogicalDisk
|
    Select-Object
-Property @{
        Name="FreeSpaceGB"
        Expression =
{$_.FreeSpace/1GB}
        } 
      FreeSpaceGB
     -----------
               0
6.24723815917969
               0
               0 
With the {} encapsulating the value of our expression, all
is good.
Comments