[解決済み] xPath を使用する Powershell スクリプトの .SelectSingleNode が web.config ファイルから値を抽出する際に動作していない
2022-02-17 09:04:24
質問
では、web.configファイルのスニペットを以下に示します。
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<location path="." inheritInChildApplications="false">
<connectionStrings>
...
</connectionStrings>
</location>
<location path="." inheritInChildApplications="false">
<appSettings>
<!--IT Ops-->
<add key="SomeOtherKey" value="SomeOtherValue" />
<add key="SiteDomain" value="somedomain.com" />
<add key="SomeOtherKey" value="SomeOtherValue" />
....
</appSettings>
</location>
</configuration>
私がやろうとしていることは、Powershell経由でxPathを使用してノードを見つけることです。このXMLファイルについて、いくつか注意すべき点があります。
が複数ある。
<location path="." inheritInChildApplications="false">
xmlファイル内の値です。などの他のノードを囲む。
このスクリプトを使用すると、接続文字列の値を検索し、正常に置き換えることができます。
$WebConfigFile = Join-Path $destination Web.config
[xml]$WebConfigXml = Get-Content ($WebConfigFile)
$WebConfigXml.configuration.location[2].connectionStrings.add | % { $_.connectionString = $_.connectionString -replace "some value", $sqlServerName }
しかし、このスクリプトを使って add key="SiteDomain" の値を置き換えようとすると。
$node = $WebConfigXml.configuration.location[3].appSettings.SelectSingleNode("add[@key = 'SiteDomain']")
$node.value = "someValue"
$WebConfigXml.Save($WebConfigFile)
はうまくいきません。この場合の$nodeの値には空の文字列が含まれています。
また、このようにノードを読み取ることだけを試しています。
$appSettingsSection = $WebConfigXml.configuration.location[3].appSettings;
$existingSiteDomain = $appSettingsSection.SelectSingleNode("add[@key='SiteDomain']")
そして、$existingSiteDomainの値には、まだ空の文字列が表示されます。
SelectSingleNodeを使ったサンプルを見てみましたが、なかなか理解できません。何が間違っているのかよくわかりません。
ありがとうございます。 マイク
解決方法は?
XML ファイルに名前空間があります。
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
のために名前空間マネージャが必要なのです。
SelectSingleNode
(を参照してください)。
XPath式は名前空間を含むことができます。名前空間の解決は XmlNamespaceManager . XPath 式にプレフィックスが含まれる場合、プレフィックスと名前空間 URI のペアを XmlNamespaceManager .
こんな感じでいいんじゃないでしょうか。
$ns = New-Object System.Xml.XmlNamespaceManager($WebConfigXml.NameTable)
$ns.AddNamespace("ns", $WebConfigXml.DocumentElement.NamespaceURI)
$node = $WebConfigXml.SelectSingleNode("//ns:add[@key='SiteDomain']", $ns)
関連
-
[解決済み] powershellでパラメータ'Path'がNULLのため引数を結合できないエラーの取得
-
[解決済み] リモートサーバーへのEnter-PSSessionが "access is denied "で失敗する。
-
[解決済み] Invoke-Sqlcmd エラー : リモート DB サーバを呼び出すために powershell を実行すると、ユーザ xxxx のログインに失敗しました。
-
[解決済み] Powershell ISE 内の別の PS1 スクリプトから PowerShell スクリプト PS1 を呼び出す
-
[解決済み] 配列、ハッシュテーブル、ディクショナリーを作成しますか?
-
[解決済み] Powershell Get-ChildItem -Filter は、同じ値でWhere句とは異なる動作をします。
-
[解決済み] 実行中のPowerShellスクリプトからすべての環境変数を表示する
-
[解決済み] PowerShellスクリプトから終了コードを返す
-
[解決済み] Get-MSolUserのフィルタリング方法
-
[解決済み】PowerShellを使った再帰的ファイル検索
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] powershell で再利用するために資格情報を保存すると、ConvertTo-SecureString : Key not valid for use in specified state というエラーが発生する。
-
[解決済み] リモートサーバーへのEnter-PSSessionが "access is denied "で失敗する。
-
[解決済み] PowerShellで"%"(パーセント)は何をするのですか?
-
[解決済み] 管理者として実行しても、「要求されたレジストリへのアクセスは許可されません」と表示される。
-
[解決済み] PowerShellでLDAPクエリ
-
[解決済み] いずれかのキーを押して続行[複製]。
-
[解決済み] Powershell Get-ChildItem -Filter は、同じ値でWhere句とは異なる動作をします。
-
[解決済み] グローバル変数名が関数に渡された変数である関数からPowerShellのグローバル変数を設定する
-
[解決済み] Join-Pathを使って、2つ以上の文字列をファイルパスに結合するにはどうすればよいですか?
-
[解決済み] PowerShellスクリプトのファイルシステムの場所を取得するにはどうすればよいですか?