如何使用powershell修改web.config中的目标值

时间:2014-09-05 13:45:43

标签: powershell

您好我正在尝试更改powershell中的目标值,但没有运气。 这是我正在使用的脚本。它可以很好地更改应用程序设置值,但不能更改目标值

$webConfig = 'C:\Users\Desktop\xml\web.config'
$doc = (Get-Content $webConfig) -as [Xml]
$obj = $doc.configuration.targets | where {$_.filename -eq 'test.log.txt'}
$obj.value = 'C:\test_logs\test.log.txt-${shortdate}.log.txt'
$doc.Save($webConfig)

我收到以下错误。 物业价值'在这个对象上找不到。验证该属性是否存在且可以设置。

这是web.config

<targets>
  <target name="f1" xsi:type="File" fileName="test.log.txt" layout="${threadname} ${longdate}  
${callsite} ${logger}[${level}] ${message}" />
  <target name="console" xsi:type="Console" layout="${threadname} ${longdate} ${callsite}   
${logger}[${level}] ${message}" />
</targets>

编辑过的脚本     $ webConfig =&#39; C:\ Users \ Desktop \ xml \ web.config&#39;     $ doc =(Get-Content $ webConfig)-as [Xml]     $ obj = $ doc.configuration.targets.target |其中{$ _。fileName -eq&#39; test.log.txt&#39;}     $ obj.SetAttribute&#39; C:\ test_logs \ test.log.txt - $ {shortdate} .log.txt&#39;     $ doc.Save($ webConfig)

2 个答案:

答案 0 :(得分:0)

$ obj是空的,你错过了'目标'属性

$obj = $doc.configuration.targets | foreach { $_.target } | where { $_.fileName...

或者在v3中:

$obj = $doc.configuration.targets.target | where { $_.fileName -and $_.fileName -eq..

答案 1 :(得分:0)

请尝试使用SetAttribute(string,string)。我在使用PowerShell为属性/子元素设置的魔术属性时遇到了问题:

$obj.SetAttribute( 'value', 'C:\test_logs\test.log.txt-${shortdate}.log.txt' )

如果缺少value属性,这也会有效。