2014-09-05 63 views
0

嗨,我试图改变powershell中的目标值,但没有运气。 这是我正在使用的脚本。它可以很好地改变应用程序的设置值,但不是目标值如何使用powershell修改web.config中的目标值

$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 = 'C:\用户\桌面\ XML \的web.config' $ DOC =(获取内容$ webConfig)-as [Xml] $ obj = $ doc.configuration.targets.target |其中{$ _。fileName -eq'test.log.txt'} $ obj.SetAttribute'C:\ test_logs \ test.log.txt - $ {shortdate} .log.txt' $ doc.Save($ webConfig )

回答

0

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

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

或者在V3:

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

我收到此错误消息,当我使用上面的代码 – san 2014-09-08 13:51:46

+0

你不能调用一个空值表达式的方法。我修改了有问题的脚本 – san 2014-09-08 13:52:07

0

尝试SetAttribute(string,string)代替。我遇到的问题与使用魔法属性的PowerShell设置的属性/子元素:

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

这也将工作,如果value属性丢失。

+0

这不适用于我 – san 2014-09-09 15:52:19