我没有使用过很多XML,所以这对大多数人来说可能是一个基本问题......
我想从Get-ChildItem收集信息,并结合Get-Acl,并将其存储在XML文件中,以便稍后在PowerShell中使用。
问题:为了让我使用Get-Acl,我必须在管道中使用foreach循环,然后将对象类型更改为system.string。因此,当我将其导出到XML时,它几乎只是一个平面文件,而不是表格结构。
如何恢复表格结构?
如果我只是执行此命令,我可以获得表结构:
Get-ChildItem . -Recurse |
Select FullName, PSIsContainer, CreationTimeUTC, LastAccessTimeUtc, Length |
Export-Clixml .\STIGTest\Baseline_1.xml
当我执行此命令时,我得到的是平面文件:
Get-ChildItem . -Recurse |
foreach-object {$AclOwner = (get-acl $_.pspath).owner; $_.Fullname, $_.PSIsContainer, $_.CreationTimeUtc, $_.LastAccessUtc, $_.Length, $AclOwner} |
Export-Clixml .\STIGTest\Baseline_2.xml
我已经看到你可以将系统对象转换为字符串,但似乎无法找到我可以反过来的地方。我猜他们是否作为系统对象保留XML文件将保留表结构?
答案 0 :(得分:1)
试试这个。它利用了Select-Object
可以创建由表达式指定的“计算”属性这一事实。
Get-ChildItem . -Recurse |
Select FullName,
PSIsContainer,
CreationTimeUTC,
LastAccessTimeUtc,
Length,
@{Name='Owner';Expression={ (Get-Acl $_.PSPath).Owner }} |
Export-Clixml .\STIGTest\Baseline_1.xml
为了清楚起见,我写了@{Name=...; Expression=...}
,但可以缩短为@{N=...,E=...}
。
答案 1 :(得分:1)
Get-ChildItem . -recurse |
foreach-object {$AclOwner = (get-acl $_.pspath).owner; Add-Member -input $_ -MemberType noteproperty -Name AclOwner -Value $AclOwner; $_ } |
Select FullName, PSIsContainer, CreationTimeUTC, LastAccessTimeUtc, Length, AclOwner |
Export-Clixml .\STIGTest\Baseline_1.xml