首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Powershell更新web.config中的WCF端点节点

使用Powershell更新web.config中的WCF端点节点
EN

Stack Overflow用户
提问于 2015-04-07 17:16:29
回答 1查看 557关注 0票数 1

我需要在我们的web.config中更新一组WCF端点,我想把它作为一个命令添加到一个powershell脚本中。下面是我目前正在编写的脚本。它将很好地更新ConnectionString节点,但是它在Periscope.My.MySettings部分中找不到任何value节点。

循环将执行特定次数,但是每次$_.value变量中的值都是空的。

web.config

代码语言:javascript
复制
<applicationSettings>
  <Periscope.My.MySettings>
    <setting name="Periscope_periscopeSearch_Service1" serializeAs="String">
      <value>http://inside.com/periscopeSearch/Service1.asmx</value>
    </setting>
    <setting name="Periscope_periscopeRetrieveRelationships_Service1" serializeAs="String">
      <value>http://inside.com/periscopeRetrieveRelationships/Service1.asmx</value>
    </setting>
    <setting name="Periscope_periscopeRetrieveProducers_Service1" serializeAs="String">
      <value>http://inside.com/periscopeRetrieveProducers/Service1.asmx</value>
    </setting>
    <setting name="Periscope_periscopeRetrieveMasterSubs_Service1" serializeAs="String">
      <value>http://inside.com/periscopeRetrieveMasterSubs/Service1.asmx</value>
    </setting>
    <setting name="Periscope_periscopeRetrieveGeneral_Service1" serializeAs="String">
      <value>http://inside.com/periscopeRetrieveGeneral/Service1.asmx</value>
    </setting>
    <setting name="Periscope_periscopeRetrieveComments_Service1" serializeAs="String">
      <value>http://inside.com/periscopeRetrieveComments/Service1.asmx</value>
    </setting>
    <setting name="Periscope_periscopeRetrieveProfiles_Service1" serializeAs="String">
      <value>http://inside.com/periscopeRetrieveProfiles/Service1.asmx</value>
    </setting>
  </Periscope.My.MySettings>
</applicationSettings>

Powershell

代码语言:javascript
复制
$dir = Get-ChildItem $directory -Recurse 
$config = $dir  | where {$_.extension -eq ".config"}

#generated config connection strings
foreach($file in $config)
{   
    Write-Host "Updating $file" -ForegroundColor Green    
    $doc = [xml](Get-Content $file.FullName)

    #THIS WORKS FINE
    if($doc.configuration.connectionStrings){
        $doc.configuration.connectionStrings.add |%{
            if($_.connectionString.ToLower() -match $oldDb.ToLower()){
                $_.connectionString = $_.connectionString.ToLower().replace($oldDb.ToLower(), $newDb)
            }
        }
    }

    #THE $_.value VARIABLE IS EMPTY EVERY TIME
    $doc.configuration.applicationSettings.Periscope.My.MySettings.add | foreach {
        if($_.value){
            $tempString = $_.value.ToLower()
            if($tempString -match $oldDb.ToLower()){
                $_.value = $tempString.replace($oldDb, $newDb)
            }
            elseif($tempString -match $oldDomain.ToLower()){
                $_.value = $tempString.replace($oldDomain.ToLower(), $newDomain)
            }
        }   
    }

    $doc.Save($file.FullName) 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-07 17:25:26

您有带句点(Periscope.My.MySettings)的XML元素,所以必须用'来转义它们,这样xml才能正确地将其作为一个元素来处理,而不是3个单独的元素。您还需要将add更改为setting,因为add在设置中不存在,它只存在于连接字符串中。

您应该像这样修改代码:

代码语言:javascript
复制
$doc.configuration.applicationSettings.'Periscope.My.MySettings'.setting | foreach {
    # Your other code
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29497326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档