3

多数の web.config ファイルがあります。どの URL にマシン名が含まれていますか。

これは私のサンプル web.config ファイルです

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.Model>
<client>
      <endpoint address="http://MyMachineName:80/MyProj/Core/NewService/SecurityObject.0/Secretservice.svc" binding="basicHttpBinding" bindingConfiguration="MyProj_Internal_Routing" behaviorConfiguration="UserSIDBehavior" contract="SecurityMgmt.SecurityMgmtContract" name="HttpEndpointSecMgt" />
      <endpoint address="http://MyMachineName:80/MyProj/Core/DataObject/SystemCatalogs1.0/DataObjectservice/DataObjectservice.svc" binding="basicHttpBinding" bindingConfiguration="MyProj_Internal_Routing" behaviorConfiguration="UserSIDBehavior" contract="DataObjectservice.SystemCatalogsDataObjectservice" name="BasicHttpBinding_SystemCatalogsDataObjectservice" />
      <endpoint address="http://MyMachineName:80/MyProj/Core/NewService/Movement.0/Movement.svc" binding="basicHttpBinding" bindingConfiguration="MyProj_Internal_Routing" behaviorConfiguration="UserSIDBehavior" contract="NavigationClientLib.NavigationNewService" name="BasicHttpBinding_NavigationNewService" />
 </client>

 <system.Model>

 </configuration>

ユーザーがマシン名を変更すると、すべての xml ファイルでこれを更新する必要があります。

このような関数を書くことにしました。

    Function Update-MachineName ([string] $FilePath,[string] $xpath, [string] $NewMachineName="NewComputer") {


    # Get the config file contents
    $WebConfig = [XML] (Get-content $Filepath)

    #Find the url using xpath which has old Machine name 
    $hostnameString= Select-XML -XML $WebConfig -XPath $Xpath

    Foreach ( $hostname in $hostnameString) { 

           if ( ($hostname.Node.value -match 'http') -eq $true ) {

               $hostname.Node.value
               $MachineOldName = $($($hostname.Node.value.split("/"))[2].split(":"))[0]
               $MachineOldName

               $hostname.Node.value.replace( $MachineOldName,$NewMachineName)

           }
    }

 $WebConfig.Save($FilePath)
}

Update-MachineName "C:\web.config" "//@address"

新しいマシン名に置き換えても、web.config の内容は更新されません。新しいマシン名で更新する方法

4

4 に答える 4

3

置換値はノードに保存されません。この行を変更します。

$hostname.Node.value.replace( $MachineOldName,$NewMachineName)

$hostname.Node.value=$hostname.Node.value.replace( $MachineOldName,$NewMachineName)
于 2012-05-14T12:44:19.590 に答える
3

上記の XML 構造のマシン名を置き換えるだけの場合は、XML を解析して XPath を使用する必要はありません...

$oldMachineName = "MyMachineName"
$newMachineName = "MyBrandNewMachineNAme"

$content = Get-Content -path $filePath
$content | foreach { $_.Replace($oldMachineName, $newMachineName) } | Set-Content $filePath
于 2012-05-14T12:42:30.653 に答える
1

関数では、ファイルをディスクに保存し直す必要があります。メモリ内の xml で操作しているため、変更はコンソールにのみ表示され、実際のファイルには表示されません。

于 2012-05-14T12:03:02.153 に答える
0

次のように使用できます。

$nodoEndpointSvcAddress = $($configXml.configuration.'system.serviceModel'.client.endpoint |  where { $_.name -eq "MyEndPoint1" })
[string]$endpointSvcAddress = $nodoEndpointSvcAddress.address
Write-Host $endpointSvcAddress

# Replace
$server = "test"
iif ($endpointSvcAddress.Contains($server))
{
    Write-Host "`r`nReplace $endpointSvcAddress"
    $nodoEndpointSvcAddress.address=$nodoEndpointSvcAddress.address.replace( $server,"PROSERVER")
    Write-Host ("Replaced " + $nodoEndpointSvcAddress.address)

}

$configXml.Save($pathCDR)
于 2014-11-17T08:42:37.417 に答える