我正在尝试使用PowerShell中的-ExpandProperty
功能来停止标题出现在输出中,并格式化日期,而没有分钟和秒。这只是为了获取AD对象的创建日期:
Get-ADComputer -Server $Server -Identity BlahBlah -Properties Created |
Select-Object -ExpandProperty @{Name="Created";Expression={$_.Created.ToString("yyyy-MM-dd")}}
这不会产生结果,只有当我排除"-ExpandProperty"
部分时,它才会产生正确的日期格式,但包含我不希望的标题"Created"
。
有什么想法吗?
答案 0 :(得分:1)
在PowerShell中,几乎总是有不止一种解决方案-
(Get-ADComputer -Server $Server -Identity BlahBlah -Properties Created |
Select-Object @{N="Created";E{$_.Created.ToString("yyyy-MM-dd")}} ).Created
或
Get-ADComputer -Server $Server -Identity BlahBlah -Properties Created |
Select-Object @{N="Created";E{$_.Created.ToString("yyyy-MM-dd")}} |
Select-Object -Expand Created
只要可以唯一标识参数名称,就可以将其缩写,并且还存在快捷方式(大写字母),因此-EA是-ErrorAction
IMO的计算属性没有意义,因为它是唯一的输出,因此也应该这样做:
Get-ADComputer -Server $Server -Identity BlahBlah -Properties Created |
ForEach-Object {$_.Created.ToString("yyyy-MM-dd")}
答案 1 :(得分:1)
为互补 LotPings' helpful answer,它提供了有效的解决方案:
关于 为什么您的代码无效:
尽管Select-Object
的{{1}}参数接受定义calculated properties(例如在您的代码中)的哈希表,但 -Property
参数仅接受属性 name 作为 string 。
因此,您的哈希表只是 stringized ,导致字符串文字-ExpandProperty
,导致System.Collections.Hashtable
抱怨,因为该名称没有属性。
Select-Object
的目的是仅输出属性 value 而不是具有该属性的自定义对象。
因此,您不需要通过-ExpandProperty
绕行,而只需直接使用Select-Object
来使用值输出脚本块-{ $_.Created.ToString("yyyy-MM-dd") }
,如下所示LotPings回答的底部。
但是,您使用ForEach-Object
会放弃一项晦涩的功能:ForEach-Object
允许将 Select-Object
与-ExpandProperty
组合在一起,在这种情况下通过-Property
指定的属性将作为-Property
成员添加到通过NoteProperty
指定的属性的 value :
-ExpandProperty
请注意,输出 string 值PS> $val = [pscustomobject] @{ one = 'uno'; two = 2 } |
Select-Object -ExpandProperty one -Property two; $val; $val.two
uno
2
附加了输入对象的'uno'
属性的副本。
要使用.two
进行仿真,需要做更多的工作:
ForEach
答案 2 :(得分:0)
我目前无法访问广告,但这可能就是您想要的
已更新
Get-ADComputer -Server $Server -Identity BlahBlah -Properties Created | Select-Object Created | ForEach-Object {$_.Created.ToString("yyyy-MM-dd")}