【问题标题】:How to execute and output from XML via Powershell如何通过 Powershell 从 XML 执行和输出
【发布时间】:2019-11-14 22:38:19
【问题描述】:

如何实现从 XML 文件中输出现有值和更改的值? 我正在使用此代码更改 xml 文件中的配置:

[xml]$config = gc $DirectoryPath\Web.config
$config.configuration.appSettings.Item(0).value = "new-value1"
$config.configuration.appSettings.Item(1).value = "new-value2"     
$config.Save("$DirectoryPath\Web.config")

我需要获取两个值(现有的和更改的)的输出。 如果我使用括号:

(Write-Host($config.configuration.appSettings.Item(0).value) = "new-value1")

我得到了需要的输出结果:

value1 = new-value1

但未应用 XML 文件中的更改。

如果我在输出中从 XML 文件中获取现有的行号,那就太好了,例如:

value1 = new-value1 at line #10

【问题讨论】:

    标签: xml powershell


    【解决方案1】:

    您不能同时输出一个 XML 元素并为其分配一个新值。使用两个语句:

    Write-Host $config.configuration.appSettings.Item(0).value
    $config.configuration.appSettings.Item(0).value = "new-value1"
    

    如果要同时输出两个值,请在分配新值后添加另一个 Write-Host 语句。

    您可以通过先将父对象分配给变量来稍微缩短语句:

    $appSettings = $config.configuration.appSettings
    Write-Host $appSettings.Item(0).value  # output old value
    $appSettings.Item(0).value = "new-value1"
    Write-Host $appSettings.Item(0).value  # output new value
    

    如果您尝试在同一输出行中获取旧值和新值,您可以执行以下操作:

    $appSettings = $config.configuration.appSettings
    Write-Host -NoNewline $appSettings.Item(0).value  # output old value
    $appSettings.Item(0).value = "new-value1"
    Write-Host " =" $appSettings.Item(0).value        # output new value
    

    或者在更改之前先将值分​​配给另一个变量,然后再输出两个值:

    $appSettings = $config.configuration.appSettings
    $oldvalue = $appSettings.Item(0).value
    $appSettings.Item(0).value = "new-value1"
    Write-Host ('{0} = {1}' -f $oldvalue, $appSettings.Item(0).value)
    

    关于获取行号,XML 不是面向行的格式,所以这行不通。

    【讨论】:

      猜你喜欢
      • 2019-05-02
      • 2013-03-04
      • 2019-12-26
      • 1970-01-01
      • 2018-11-09
      • 2017-09-09
      • 1970-01-01
      • 2012-07-05
      • 2016-09-17
      相关资源
      最近更新 更多