Powershell:将自定义对象导出到CSV文件-使用“选择对象”提取单个属性值
我编写了一个脚本,用于构造自定义对象并将其导出到CSV文件:Powershell:将自定义对象导出到CSV文件-使用“选择对象”提取单个属性值,powershell,export-to-csv,select-object,Powershell,Export To Csv,Select Object,我编写了一个脚本,用于构造自定义对象并将其导出到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
$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=5/6/2016 6:02:32 AM},“{$.LastWriteTime=7/5/2016 8:34:01 PM}”
是否可以除去不需要的@{=…}
包装器?表达式:
Select-Object {$_.LastWriteTime}
输出具有名称为$\uLastWriteTime
的单个属性的对象。解决此问题的最简单方法是使用-ExpandProperty
参数,该参数将只输出您感兴趣的值。e、 g:
$date86 = Get-ItemProperty 'C:\Program Files (x86)\McAfee'|
Select-Object -ExpandProperty LastWriteTime
请注意,我还从选择对象命令中删除了脚本块,因为它不是必需的。补充[1]
有其他选择:
如果只需要给定对象属性的值,只需将命令包装在(…)
中并使用
:
在PSv3+中,上述命令还可用于返回多个项(数组)的命令,在这种情况下,将输出输入项的单个属性值的数组-此功能被调用
PSv3为每个对象
%
/引入了一种快捷语法
(还有?
/其中的对象
),也可以在此处使用:
Get-ItemProperty 'C:\Program Files\McAfee' | % LastWriteTime # ditto
这相当于更详细的(也适用于PSv2-):
这两种基于管道的语法形式速度较慢,但有两个优点:
- 为了保持内存使用恒定,大型输入集合最好在管道中逐个处理(如果可行,如果需要在内存中收集整个输出,则没有优势)
- 此语法明确引用单个项的属性,而不是集合的整体属性
- 例如,
返回(Get ChildItem-File C:\Windows).Length
中的文件计数,因为C:\Windows
被解释为集合的(数组)属性Length
相反,
返回单个文件的getchilditem-filec:\Windows |%Length
(文件大小)属性值数组.Length
- 例如,
(Get-ItemProperty 'C:\Program Files\McAfee').ForEach('LastWriteTime')
[1] 快速概述的行为:
为每个输入对象返回一个自定义对象,仅包含指定的属性;即使只指定了一个特性,结果也是具有该特性的自定义对象,而不是特性值本身选择对象[-Property]
- 相反,使用
会从每个输入对象(按原样键入)返回给定的单个属性值-ExpandProperty
Get Date
调用中提取Year
属性值:
# 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*
(Get-ItemProperty 'C:\Program Files\McAfee').ForEach('LastWriteTime')
# 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*