GetType used in PowerShell, difference between variables

后端 未结 3 364
离开以前
离开以前 2021-01-30 19:22

What is the difference between variables $a and $b?

$a = (Get-Date).DayOfWeek
$b = Get-Date | Select-Object DayOfWeek

相关标签:
3条回答
  • 2021-01-30 19:42

    First of all, you lack parentheses to call GetType. What you see is the MethodInfo describing the GetType method on [DayOfWeek]. To actually call GetType, you should do:

    $a.GetType();
    $b.GetType();
    

    You should see that $a is a [DayOfWeek], and $b is a custom object generated by the Select-Object cmdlet to capture only the DayOfWeek property of a data object. Hence, it's an object with a DayOfWeek property only:

    C:\> $b.DayOfWeek -eq $a
    True
    
    0 讨论(0)
  • 2021-01-30 19:56

    Select-Object creates a new psobject and copies the properties you requested to it. You can verify this with GetType():

    PS > $a.GetType().fullname
    System.DayOfWeek
    
    PS > $b.GetType().fullname
    System.Management.Automation.PSCustomObject
    
    0 讨论(0)
  • 2021-01-30 19:56

    Select-Object returns a custom PSObject with just the properties specified. Even with a single property, you don't get the ACTUAL variable; it is wrapped inside the PSObject.

    Instead, do:

    Get-Date | Select-Object -ExpandProperty DayOfWeek
    

    That will get you the same result as:

    (Get-Date).DayOfWeek
    

    The difference is that if Get-Date returns multiple objects, the pipeline way works better than the parenthetical way as (Get-ChildItem), for example, is an array of items. This has changed in PowerShell v3 and (Get-ChildItem).FullPath works as expected and returns an array of just the full paths.

    0 讨论(0)
提交回复
热议问题