Powershell, импорт значений реестра из XML - PullRequest
0 голосов
/ 03 мая 2018

Это мой первый пост, и я немного новичок в PowerShell, поэтому извиняюсь за любые проблемы с публикацией.

У меня возникают некоторые проблемы при попытке импортировать значения реестра из отформатированного файла XML. Я могу читать содержимое XML и использовать foreach для циклического прохождения XML-кода, но я застрял, пытаясь создать команды New-ItemProperty. Вот пример XML:

<?xml version="1.0" encoding="utf-8" ?>
<REGUPDATES>
<SASR>
    <Reg>
        <Key>HKLM:\Some\Key\Path\000\111\22222</Key>
        <Name>Something.exe</Name>
        <Type>DWORD</Type>
        <Value>00000001</Value>
    </Reg>
    <Reg>
        <Key>HKLM:\Some\Key\Path\333\444\55555</Key>
        <Name>Something.exe</Name>
        <Type>DWORD</Type>
        <Value>00000002</Value>
    </Reg>
</SASR>
</REGUPDATES>

А вот пример кода PowerShell:

[xml]$RegUpdates = Get-Content C:\Temp\RegUpdates.xml 
$SASRReg = $RegUpdates.REGUPDATES.SASR.Reg
$SASRKey = $RegUpdates.Regupdates.SASR.Reg.Key
$SASRName = $RegUpdates.Regupdates.SASR.Reg.Name 
$SASRType = $RegUpdates.Regupdates.SASR.Reg.Type 
$SASRValue = $RegUpdates.Regupdates.SASR.Reg.Value 
foreach ($IAVA in ($SASRReg))
{
New-ItemProperty -Path ([string]$SASRKey) -Name ([string]$SASRName) -     
PropertyType ([string]$SASRType) -Value ([string]$SASRValue)

Похоже, что значения ключей реестра (как и другие переменные) связаны друг с другом. Вот ошибка, которую я вижу:

New-ItemProperty : Cannot find path 'HKLM:\Some\Key\Path\000\111\22222 
HKLM:\Some\Key\Path\333\444\55555' because it does not exist.

Заранее благодарим за любую помощь!

1 Ответ

0 голосов
/ 03 мая 2018

Вам понадобится цикл для обработки массива:

$Xml = [xml](Get-Content -Path 'myfile.xml')

ForEach ($Update in $Xml.REGUPDATES.SASR.REG)
{
    $PropArgs = @{
        'Path'         = $Update.Key
        'Name'         = $Update.Name
        'Value'        = $Update.Value
        'PropertyType' = $Update.Type
        'Force'        = $True
    }
    New-ItemProperty @PropArgs
}

Все элементы xml уже видны как строки, поэтому вам не нужно их приводить.

...