在PowerShell中使用的GetType,variables之间的区别
variables$a
和$b
什么区别?
$a = (Get-Date).DayOfWeek $b = Get-Date | Select-Object DayOfWeek
我试图检查
$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
但是,尽pipe这些variables的输出看起来不同,但似乎没有区别。
首先,你缺less调用GetType的圆括号。 你所看到的是描述[DayOfWeek]上的GetType方法的MethodInfo。 要真正调用GetType,你应该这样做:
$a.GetType(); $b.GetType();
您应该看到$a
是[DayOfWeek],而$b
是由Select-Object cmdlet生成的自定义对象,用于仅捕获数据对象的DayOfWeek属性。 因此,它只是具有DayOfWeek属性的对象:
C:\> $b.DayOfWeek -eq $a True
select对象创build一个新的psobject并复制你请求的属性。 你可以使用GetType()来validation它:
PS > $a.GetType().fullname System.DayOfWeek PS > $b.GetType().fullname System.Management.Automation.PSCustomObject
Select-Object只返回一个具有指定属性的自定义PSObject 。 即使有一个属性,你也不会得到ACTUALvariables; 它被包裹在PSObject内部。
相反,做:
Get-Date | Select-Object -ExpandProperty DayOfWeek
那会得到和你一样的结果:
(Get-Date).DayOfWeek
不同之处在于,如果Get-Date返回多个对象,则pipe道方式比(Get-ChildItem)
的括号方式更好,例如,是一组项目。 这在PowerShell v3和(Get-ChildItem).FullPath
已经改变(Get-ChildItem).FullPath
按预期工作,并返回一个完整path的数组。
- 通过命令行将variables传递给PowerShell脚本
- 如何在.NET MySqlCommand中使用MySql用户定义的variables?
- 使用IDE时从Powershell调用第三方可执行文件时出错
- 无法使用visual studio 2013debugging托pipe代码(“无法评估expression式”错误 – 我正在使用debugging版本)(请注意VS 2012的工作原理)
- 由于“无法初始化PowerShell主机”,无法安装nuget软件包
- 如何使用PowerShell删除文件上的ReadOnly属性?
- PowerShell是否准备好在Windows上replace我的Cygwin shell?
- 如何检查一个string是否为空或在PowerShell中为空?
- 以IP地址作为目标的Powershell远程处理