如何通过Powershell执行和输出

时间:2019-07-04 08:27:14

标签: xml powershell

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

  trait Wrapper[T] {
    type Own[F[_]] <: OwnThing[F, T]
    def ask[F[_]](implicit own: Own[F])
  }

  object Wrapper {
    type Aux[T, Own0[F[_]] <: OwnThing[F, T]] = Wrapper[T] { type Own[F[_]] = Own0[F] }
  }

  class CombinedWrapper[A, B, OwnA[F[_]] <: OwnThing[F, A], OwnB[F[_]] <: OwnThing[F, B]](
    val wrapperA: Wrapper.Aux[A, OwnA], val wrapperB: Wrapper.Aux[B, OwnB]
  ) extends Wrapper[(A, B)] {
    override type Own[F[_]] = SomeOwnThing[F, A, B, OwnA[F], OwnB[F]]
    override def ask[F[_]](implicit own: Own[F]) = ???
  }

我需要获得两个值的输出(已存在和已更改)。 如果我使用方括号:

[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")

我正在获得所需的输出结果:

value1 = new-value1

但XML文件中的更改不适用。

如果我从输出的XML文件中获取现有的行号,那也很好,例如:

value1 = new-value1 at line #10

1 个答案:

答案 0 :(得分: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不是面向行的格式,因此无法使用。