我有 XML
文件,内容如下:
<Tenants>
<Tenant name="tenant_1" url="8s0n3lewbf7v.local" site="98074" path="\\1f7csgqde3l7.local\share\shared\98074" />
<Tenant name="tenant_2" url="8s0n3lewbf7v.local" site="62761" path="\\1f7csgqde3l7.local\share\shared\62761" />
<Tenant name="tenant_3" url="8s0n3lewbf7v.local" site="24387" path="\\1f7csgqde3l7.local\share\shared\24387" />
<Tenant name="tenant_4" url="8s0n3lewbf7v.local" site="85670" path="\\1f7csgqde3l7.local\share\shared\85670" />
<Tenant name="tenant_5" url="8s0n3lewbf7v.local" site="29117" path="\\1f7csgqde3l7.local\share\shared\29117" />
</Tenants>
tenants
块包含未知数量的对象,其中每个 path
需要更新。
path
具有 UNC
格式,该格式也是未知的。
任务是用变量 1f7csgqde3l7.local
和 URL {{1} 替换 path
块的每个 Tenants
中的服务器名称 $server
(未知) }} 带有一个变量 8s0n3lewbf7v.local
。
使用 PowerShell 实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
可能不是最好的方法,但你可以试试
正则表达式获取 UNC 路径
[regex]$reg = "\\\\([a-z0-9_.$]+)\\"
以 XML 格式获取内容
[xml]$xml = Get-Content -Path xml_file.xml
遍历你的结构,它只是用你的 $url 替换匹配的 UNC
Foreach($x in $xml.Tenants.Tenant){
$x.path = $x.path.Replace($reg.Match($x.path).Value,"\\$url\")
}
并保存
$xml.Save("xml_file.xml")
答案 1 :(得分:1)
如果我理解正确的话,您正在寻找这样的东西:
$xml = [xml]'<Tenants>
<Tenant name="tenant_1" url="8s0n3lewbf7v.local" path="\\1f7csgqde3l7.local\share\shared\98074_prod" />
<Tenant name="tenant_2" url="8s0n3lewbf7v.local" path="\\1f7csgqde3l7.local\share\shared\62761_prod" />
<Tenant name="tenant_3" url="8s0n3lewbf7v.local" path="\\1f7csgqde3l7.local\share\shared\24387_prod" />
<Tenant name="tenant_4" url="8s0n3lewbf7v.local" path="\\1f7csgqde3l7.local\share\shared\85670_prod" />
<Tenant name="tenant_5" url="8s0n3lewbf7v.local" path="\\1f7csgqde3l7.local\share\shared\29117_prod" />
</Tenants>
'
$new_server = "abcd123cde56"
$new_url="123456789asd.local"
$nodes = $xml.SelectNodes(".//Tenants//Tenant");
foreach($node in $nodes) {
$target_path = $node.GetAttribute("path")
$delim = ".lo"
$name = $target_path -split $delim
$newname = -join("\\",$new_server,$delim ,$name[1]);
$node.SetAttribute("path", $newname);
$node.SetAttribute("url", $new_url);
}
结果应该是
<Tenants>
<Tenant name="tenant_1" url="123456789asd.local" path="\\abcd123cde56.local\share\shared\98074_prod" />
<Tenant name="tenant_2" url="123456789asd.local" path="\\abcd123cde56.local\share\shared\62761_prod" />
<Tenant name="tenant_3" url="123456789asd.local" path="\\abcd123cde56.local\share\shared\24387_prod" />
<Tenant name="tenant_4" url="123456789asd.local" path="\\abcd123cde56.local\share\shared\85670_prod" />
<Tenant name="tenant_5" url="123456789asd.local" path="\\abcd123cde56.local\share\shared\29117_prod" />
</Tenants>