【问题标题】:Creating XML file from PowerShell command output从 PowerShell 命令输出创建 XML 文件
【发布时间】:2011-08-06 04:26:13
【问题描述】:

我没有经常使用 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 文件将保持表结构?

【问题讨论】:

    标签: xml powershell


    【解决方案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=...}

    【讨论】:

    • 啊,我已经看到用于 SQL Server 的 PS 脚本。这就是魔法。所以据我了解,@{} 是一个哈希表?我会用什么术语来查找有关使用它的信息,也许在 Select-object 下?
    • 太棒了!这也解决了我为每个文件收集 ACL 信息的下一个任务。喜欢这个东西!!!
    【解决方案2】:

    @Josh Einstein 的回答和我在评论中给出的链接,另一个答案是要走的路。但是还有另一种方法可以将 acl 信息添加到对象本身,下面会总结您在问题中提到的尝试:

    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
    

    【讨论】:

    • 所以您添加了使用域/主机名提取完整用户帐户?如果我使用 XML 文件作为基线来比较目录的快照以获取所做的更改,这会有所不同吗?
    • @MeltonDBA - 我不完全理解你在问什么,但从上面生成的 xml 应该与以另一种方式生成的相同。
    猜你喜欢
    • 2019-10-07
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2016-07-21
    • 2021-05-10
    • 1970-01-01
    相关资源
    最近更新 更多