我写了构造一个自定义对象,并将其导出为CSV文件的脚本:
$reg = Get-ItemProperty HKLM:\SOFTWARE\McAfee\DLP\Agent | Select-Object agentversion
$date = Get-ItemProperty 'C:\Program Files\McAfee' | Select-Object {$_.LastWriteTime}
$date86 = Get-ItemProperty 'C:\Program Files (x86)\McAfee'| Select-Object {$_.LastWriteTime}
New-Object -TypeName pscustomobject -Property @{
"Number1"=$reg
"Number2"=$date86
"Number3"=$date } | export-csv -Path C:\****\desktop\stuff.csv -NoTypeInformation
然后在出现的CSV文件中的数据行:
“{@} AgentVersion = 9.4.112.22”, “@ {$ .LastWriteTime = 2016年5月6日上午06时02分32秒}”,“@ {$ .LastWriteTime = 2016年7月5日下午8时34分01秒}“
是否有可能摆脱不必要的@{<name>=...}
包装?
表达方式:
Select-Object {$_.LastWriteTime}
输出与名称的单一属性的对象$_.LastWriteTime
。 要解决这个问题最简单的方法是使用-ExpandProperty
参数,将只输出你感兴趣的值,例如:
$date86 = Get-ItemProperty 'C:\Program Files (x86)\McAfee'|
Select-Object -ExpandProperty LastWriteTime
请注意,我也从删除的脚本块Select-Object
命令,因为这是没有必要的。
为了补充zdan的有用的答案与备选方案[1]:
如果你只是想给定对象的财产的价值 ,简单地包裹在命令(...)
并使用.<propertyName>
(Get-ItemProperty 'C:\Program Files\McAfee').LastWriteTime # returns a [datetime] instance
在PSv3 +,上面还与命令返回多个项目(阵列),在这种情况下,输入项的个别属性值数组输出-该功能被称为构件枚举 。
PSv3推出的快捷语法%
/ ForEach-Object
(也?
/ Where-Object
),可以在这里也被利用:
Get-ItemProperty 'C:\Program Files\McAfee' | % LastWriteTime # ditto
这是更详细的等效(这也适用于PSv2-):
Get-ItemProperty 'C:\Program Files\McAfee' | % { $_.LastWriteTime }
这两个基于管线的语法形式是比较慢的,但有两个优点:
最后,在PSv4 +,你也可以使用.ForEach()
收集方法 ,不使用管道,因此速度更快(虽然比成员枚举稍微慢一点),但是,像会员枚举,要求输入集合在内存全:
(Get-ItemProperty 'C:\Program Files\McAfee').ForEach('LastWriteTime')
[1]简要概述Select-Object
的行为 :
一个简单的例子:解压Year
从属性值Get-Date
电话:
# WRONG: with (implied) -Property
PS> $val = Get-Date | Select-Object Year; "$val"
@{Year=2018} # !!
# A custom object with a Year property was returned and the above is its
# string representation, the equivalent of:
# "$([pscustomobject] @{ Year = 2018 })"
# CORRECT: with -ExpandProperty
PS> $val = Get-Date | Select-Object -ExpandProperty Year; "$val"
2018 # OK: -ExpandProperty extracted just the property's *value*
文章来源: Powershell: Export a custom object to a CSV file - extract a single property value with Select-Object