Первое: Не используйте замену регулярного выражения на xml. PowerShell очень способен обрабатывать (действительный) XML.
Как уже отмечалось, XMLyou show недействителен, поскольку в нем отсутствует элемент root.
После исправления XML, охватив все это внутри элемента <root>...</root>
вы можете прочитать это так:
[xml]$xml = Get-Content -Path 'D:\Test\input.xml' -Raw
Затем прочтите файл, чтобы обновить идентификаторы. Если этот файл похож на то, что вы нам показываете, текстовый файл, в котором каждый идентификатор находится в отдельной новой строке, используйте это:
$ids = Get-Content -Path 'D:\Test\ids.txt'
Если, однако, этот файл IS файл CSV, что-то вроде
"ID","Something"
"47","Whatever"
"49","Anything"
затем считайте идентификаторы как массив из него, используя:
$ids = (Import-Csv -Path 'D:\Test\ids.csv').ID
Теперь вы можете l oop поверх идентификаторов и изменить значение принадлежности <indicatorflag>
тег:
foreach ($id in $ids) {
($xml.root.primary.main | Where-Object {$_.id -eq $id}).indicatorflag = 'true'
}
# save the updated XML
$xml.Save('D:\Test\output.xml')