Как сгенерировать случайный пароль и обновить в 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{}
пункт.