通过Power Shell从xml文件中获取信息,以尝试卸载应用程序

时间:2018-12-11 14:36:31

标签: xml powershell

我在解析xml文件时遇到问题

<DisplayName>Remote_Take_Over_S1_0002</DisplayName>

我正在尝试从"C:\ProgramData\App-V\1BBEDDA5-595E-4CF7-834A-B282C4981469\0C71FE9F-F1C0-47F9-9518-E94898B6424F\AppxManifest.xml"

获取以上信息

我知道如何或从哪里开始,但我已经走了这么远。

            $ComputerName = $txb_hostname.Text

        $RemoteParentPath = Join-Path -Path "\\$ComputerName" -ChildPath 'c$\ProgramData\App-V'

        $RemoteManifestPaths = Get-ChildItem -Path $RemoteParentPath -Recurse -Filter 'AppxManifest.xml' | Select-Object -ExpandProperty FullName

        foreach ($manifestFile in $RemoteManifestPaths)
        {
             $xml = [xml](Get-Content -Path $manifestFile -Raw)
             $xml.SelectSingleNode('//*[local-name()="DisplayName"]/text()').Value 
             LogWrite $xml
        } 

有什么想法吗?

现在有错误 您不能在空值表达式上调用方法。 在第6行char:5

获取内容:找不到路径'H:\ AppxManifest.xml',因为它不存在。 在第5行char:18

设法对以上错误进行排序

1 个答案:

答案 0 :(得分:1)

我假设您要查找远程计算机(或者在本例中,当前计算机使用文件的UNC路径)的AppxManifest.xml路径下的所有c:\ProgramData\App-V文件,然后进行操作该XML文件以某种方式;也许要获取DisplayName值?

如果是这样,请尝试以下操作:

[string]$ComputerName = $env:COMPUTERNAME
[string]$RemoteParentPath = Join-Path -Path "\\$ComputerName" -ChildPath 'c$\ProgramData\App-V'
[string[]]$RemoteManifestPaths = Get-ChildItem -Path $RemoteParentPath -Recurse -Filter 'AppxManifest.xml' | Select-Object -ExpandProperty FullName
foreach ($manifestFile in $RemoteManifestPaths) {
    $xml = [xml](Get-Content -Path $manifestFile -Raw)
    $xml.SelectSingleNode('//DisplayName/text()').Value
}  

我将其分解为多行,以使您更容易了解正在发生的事情/尝试每一块。注意:我尚未测试代码本身。