Как сгенерировать случайный пароль и обновить в XML

Пожалуйста, я плохо разбираюсь в сценариях, поэтому ищу ваши советы и поддержку по этому поводу.

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

Сценарий PowerShell -

      $Password = New-Object -TypeName PSObject
$Password | Add-Member -MemberType ScriptProperty -Name "Password" -Value { ("!@#$%^&*0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".tochararray() | sort {Get-Random})[0..16] -join '' }

Содержимое XML-файла -

      <?xml version="1.0" encoding="UTF-8"?>
<BAPI xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BAPI.xsd">
    <OPs Resource="https://XYZSevr:11231/api/Ops">
        <Password>ashdjaks723</Password>
    </OPs>
</BAPI>

2 ответа

Решение

Что-то вроде этого должно сделать это:

      $xmlFile = "D:\Test\YourXmlFile.xml"   # put your file here
$xml = New-Object System.XML.XMLDocument
$xml.Load($xmlFile)

$pwChars = "!@#$%^&*0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".ToCharArray()
$password = ($pwChars | Sort-Object {Get-Random})[0..16] -join ''

# set the password on the Password element inside the OPs element where it matches the Resource attribute
($xml.BAPI.OPs | Where-Object {$_.Resource -eq "https://XYZSevr:11231/api/Ops"}).Password = $password

# save the updated xml
$xml.Save($xmlFile)

Чтобы дополнить отличный ответ @Theos , я просто изучал альтернативные шаблоны и / или синтаксис. Не принимайте этот ответ, я просто подумал, раз уж я придумал по-другому, то с таким же успехом могу поделиться им.

      $XmlFile  = "C:\temp\yourXmlFile.xml"
$PwdChars = [Char[]](65..90 + 97..122 + 48..57) + [Char[]]"!@#$%^*_"
$Pwd      = (Get-Random -InputObject $PwdChars -Count 16) -join ''
$XPath    = "/BAPI/OPs[@Resource='https://XYZSevr:11231/api/Ops']"

$Xml = [XML]::new()
$Xml.Load( $XmlFile )   


# Use Select-Xml cmdlet to change the password:
(Select-Xml -Xml $Xml -XPath $XPath).Node.PassWord = $Pwd

# Save the updated XML:
$Xml.Save( $XmlFile )

Выше я использую оператор диапазона для c

При желании вы можете пропустить Select-Xml используя .SelectSingleNode(...) метод:

      $Xml.SelectSingleNode($XPath).Password = $Pwd

Вы также можете установить пароль напрямую с помощью $xml.BAPI.OPs.Password = $Pwd. В приведенных выше примерах я оставил его условным, за исключением реализации через запрос xPath вместо Where{} пункт.

Другие вопросы по тегам