jra*_*ara 71 powershell powershell-2.0
什么是变量之间的差异$a和$b?
$a = (Get-Date).DayOfWeek
$b = Get-Date | Select-Object DayOfWeek
Run Code Online (Sandbox Code Playgroud)
我试着检查一下
$a.GetType
$b.GetType
MemberType : Method
OverloadDefinitions : {type GetType()}
TypeNameOfValue : System.Management.Automation.PSMethod
Value : type GetType()
Name : GetType
IsInstance : True
MemberType : Method
OverloadDefinitions : {type GetType()}
TypeNameOfValue : System.Management.Automation.PSMethod
Value : type GetType()
Name : GetType
IsInstance : True
Run Code Online (Sandbox Code Playgroud)
但是,尽管这些变量的输出看起来不同,但似乎没有区别.
Céd*_*Rup 124
首先,你没有括号来调用GetType.你看到的是描述[DayOfWeek]上的GetType方法的MethodInfo.要实际调用GetType,您应该:
$a.GetType();
$b.GetType();
Run Code Online (Sandbox Code Playgroud)
您应该看到它$a是[DayOfWeek],并且$b是Select-Object cmdlet 生成的自定义对象,仅捕获数据对象的DayOfWeek属性.因此,它只是一个具有DayOfWeek属性的对象:
C:\> $b.DayOfWeek -eq $a
True
Run Code Online (Sandbox Code Playgroud)
Sha*_*evy 17
Select-Object创建一个新的psobject并将您请求的属性复制到它.您可以使用GetType()验证这一点:
PS > $a.GetType().fullname
System.DayOfWeek
PS > $b.GetType().fullname
System.Management.Automation.PSCustomObject
Run Code Online (Sandbox Code Playgroud)
小智 9
Select-Object仅返回指定属性的自定义PSObject.即使使用单一属性,也不会获得ACTUAL变量; 它被包装在PSObject中.
相反,做:
Get-Date | Select-Object -ExpandProperty DayOfWeek
Run Code Online (Sandbox Code Playgroud)
这将得到与以下相同的结果:
(Get-Date).DayOfWeek
Run Code Online (Sandbox Code Playgroud)
不同之处在于,如果Get-Date返回多个对象,则管道方式比括号方式更好(Get-ChildItem),例如,是一个项目数组.这在PowerShell v3中已更改(Get-ChildItem).FullPath并按预期工作,并返回仅包含完整路径的数组.
| 归档时间: |
|
| 查看次数: |
292601 次 |
| 最近记录: |