Обновить содержимое файла конфигурации с выводом из запроса Active Directory - PullRequest
0 голосов
/ 19 апреля 2020

Пауэршелл нуб здесь! Мне нужна помощь в замене значений в моем конфигурационном файле, чтобы они соответствовали значению атрибута расширения пользователя в Active Directory.

Вот что у меня есть:

$ XML = "C: \ Users \ Test.User04 \ Documents \ test.config"

$ Variable = Get-ADUser -Identity $ env: имя пользователя -prop othertelephone -Server generi c .com .au | select @ {n = "othertelephone"; e = {$ _. othertelephone -join ";"}}

(Get-Content $ XML | Foreach-Object {$ _ -replace '10586', "$ Variable"} | Set-Content C: \ Users \ Test.User04 \ Documents \ test2.config)

Проблемы:

  1. Запрос от атрибута расширения AD предоставляет имя и значение, когда мне нужно только значение

  2. Как точно указать указанное c местоположение в файле конфигурации (красная рамка на скриншоте), для которого требуется замена только значением атрибута расширения.

Как вы можете видеть, текущим ограничением вышеприведенного кода является то, что мне нужно вручную указать значение в файле конфигурации, которое в этом примере равно '10586 ». То, что я хочу сделать, это всегда заменять значение в файле конфигурации независимо от того, какое число. Снимок экрана конфигурационного файла с красной рамкой вокруг значения, требующего замены

1 Ответ

0 голосов
/ 19 апреля 2020

Lee_Daily правильно, и вы не должны использовать замены регулярных выражений в xml файлах. PowerShell позволяет очень легко работать с xml.

Поскольку вы не предоставили типичный текстовый xml пример, это не проверено:

$xmlOut   = 'C:\Users\Test.User04\Documents\test2.config'
[xml]$xml = Get-Content -Path 'C:\Users\Test.User04\Documents\test.config' -Raw

# $Variable will be an object with one property 'otherTelephone'
$Variable = Get-ADUser -Identity $env:username -Properties otherTelephone -Server 'generic.com.au' | 
            Select-Object @{Name = "otherTelephone"; Expression = {$_.otherTelephone -join ";"}}

# find the node for which you need to replace the 'user' attribute
$userNode = $xml.SipEndpoint.Container.Connectivity | Where-Object { $_.user -eq '10586' }

# if found, replace the attribute with the 'otherTelephone' property in $Variable
if ($userNode) { $userNode.SetAttribute('user', $Variable.otherTelephone) }

# save the updated xml as new file
$xml.Save($xmlOut)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...