Regex PowerShell管柱更换
我正在尝试构建一个PowerShell脚本,这样我就给它一个输入文件和regex,它用环境变量替换匹配的内容 比如说, 如果输入文件包含以下内容:Regex PowerShell管柱更换,regex,powershell,Regex,Powershell,我正在尝试构建一个PowerShell脚本,这样我就给它一个输入文件和regex,它用环境变量替换匹配的内容 比如说, 如果输入文件包含以下内容: <?xml version="1.0" encoding="utf-8"?> <Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/Se
<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/Services" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<Parameters>
<Parameter Name="IntegrationManager_PartitionCount" Value="1" />
<Parameter Name="IntegrationManager_MinReplicaSetSize" Value="2" />
<Parameter Name="IntegrationManager_TargetReplicaSetSize" Value="#{INT_MGR_IC}" />
<Parameter Name="EventManager_InstanceCount" Value="#{EVT_MGR_IC}" />
<Parameter Name="Entities_InstanceCount" Value="#{ENT_IC}" />
<Parameter Name="Profile_InstanceCount" Value="#{PRF_IC}" />
<Parameter Name="Identity_InstanceCount" Value="#{IDNT_IC}" />
</Parameters>
</Application>
我想构建一个脚本,用INT\u MGR\u IC
环境变量的值替换{INT\u MGR\u IC}
如果你知道这样的剧本,或者能为我指出正确的方向,那将是一个很大的帮助。具体而言,我想知道如何:
{INT\u MGR\u IC}
,{EVT\u MGR\u IC}
,等等{INT_MGR_IC}
与INT_MGR_IC
env。变数这是我计划使用的正则表达式:
/{(+)}/g
只需使用cmdlet加载文件,迭代每个参数
,使用筛选所有以
开头的值
参数并更改值。最后,使用cmdlet将其写回:
$contentPath = 'Your_Path_Here'
$content = [xml] (Get-Content $contentPath)
$content.DocumentElement.Parameters.Parameter | Where Value -Match '^#' | ForEach-Object {
$_.Value = "REPLACE HERE"
}
$content | Set-Content $contentPath
如果您需要确定一个环境变量,可以使用
[environment]::GetEnvironmentVariable($\u.Value)
非常感谢所有帮助您的人。特别是,@jisaak
:)
这是我构建的解决问题的最后一个脚本。希望它对某人有用
$configPath = 'Cloud.xml'
$config = [xml] (Get-Content $configPath)
$config.DocumentElement.Parameters.Parameter | Where {$_.Value.StartsWith("#{")} | ForEach-Object {
$var = $_.Value.replace("#{","").replace("}","")
$val = (get-item env:$var).Value
Write-Host "Replacing $var with $val"
$_.Value = $val
}
$config.Save($configPath)
你是什么意思?在每个参数上循环?@jisaak:正确,1。提取包含在
#{
和}
中的所有字符串。。。然后用相关的ENV变量替换它们。好了,伙计们,在你们开始投票结束这个问题之前,请问我你们是否在理解这个问题上有困难!我认为这是一个合理的问题。至少,这是我在工作中试图解决的有效问题。我相信在某个地方也会有人受益——特别是在自动构建/部署过程中的配置文件转换方面。但不使用正则表达式,请阅读原因:@jisaak:非常感谢您的快速响应和链接。我正在经历它。谢谢你。我正在尝试一下。我想你可以使用.StartsWith(“#”)
来代替^
正则表达式,但是它需要使用大括号和$.Value
符号。但还是更具可读性——我同意。另一个:其中{$\.Value[0]-eq'#'}
;-)