我试图替换文本文件中的某个部分。 首先我搜索文本文件中是否存在
$check = Get-Content sample.txt | Where-Object {$_.Contains('<add key="IIS_VERSION" value="7" />')}
if ($checkIISv)
{
Write-Host "IIS's version is already 7"
}
else
{
Write-Host "Update IIS version to 7"
# I want to place here a code that will replace the value="7" if it is not =7
# This value is usually not 7
}
请帮助,我不认为替换功能可以在这里使用,因为&#34;值&#34;被认为是未知的。
答案 0 :(得分:2)
您可以使用带有正则表达式模式的-replace
来替换该值。但是,这是一个web / app xml-config,因此您应该将其修改为XML文档。实施例
#$xml = [xml](Get-Content "c:\folder\app.config")
$xml = [xml]@"
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="IIS_VERSION" value="8" />
<add key="somekey" value="somevalue" />
</appSettings>
</configuration>
"@
$IISVersion = $xml.SelectSingleNode("//add[@key='IIS_VERSION']")
if ($IISVersion.Value -eq 7)
{
Write-Host "IIS's version is already 7"
}
else
{
Write-Host "Update IIS version to 7"
$IISVersion.Value = "7"
}
$xml.Save("c:\folder\app.config")
答案 1 :(得分:1)
如果该行始终在那里,您当然可以使用-replace
。它有一个正则表达式替换,可以在这里使用:
$content = Get-Content sample.txt
if ($content -match '<add key="IIS_VERSION" value="7" />') {
Write-Host "IIS's version is already 7"
} else {
Write-Host "Update IIS version to 7"
$content -replace '<add key="IIS_VERSION" value="[^"]+" />', '<add key="IIS_VERSION" value="7" />'
}
关于使用字符串替换时最简单的方法。
但是,您的文件看起来非常像XML。在这种情况下,使用XML操作实际上应该更容易,PowerShell也提供了这种操作:
$content = [xml](Get-Content sample.txt)
$iisKey = $content.SelectSingleNode("//add[@key = 'IIS_VERSION']")
if ($iisKey.value -eq 7) {
Write-Host "IIS's version is already 7"
} else {
Write-Host "Update IIS version to 7"
$iisKey.value = '7'
$content.Save((Resolve-Path sample.txt))
}
(未经测试,我不经常这样做,但应该只是那些行。)
答案 2 :(得分:0)
内容看起来像XML,因此您应该考虑使用xpath表达式来选择节点并更改值(请参阅answer from Frode F.)。但是,您也可以使用正则表达式(使用正向lookbehind来查找位置)
$txt = Get-Content sample.txt
$regex = '(?<=<add key="IIS_VERSION" value=")[^"]+'
$txt -replace $regex, 7
$txt | Set-Content sample.txt
答案 3 :(得分:0)
我现在的问题是它只更新条形码格式,如果低于7则不再更新iis版本
$ path ='C:\ Users \ hello \ Documents'
vec[(ypos * XDIM) + xpos]