Как изменить значения в XML с помощью Powershell - PullRequest
1 голос
/ 29 октября 2019

У меня есть XML-файл, и я хочу изменить 2 значения внутри XML

XML:

<INSTALLTYPE Value="Standalone" />  to  <INSTALLTYPE Value="Workstation" />

<ELEVATELICENSE Value="None" />     to  <ELEVATELICENSE Value="Workgroup" />

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

Powershell:

$path = "C:\temp\Kofax.xml"
$xml = [xml](Get-Content -Path $path)
$xml.FileZilla3.VIRTUALRESCAN.INSTALLTYPE
$node = $xml.FileZilla3.VIRTUALRESCAN.INSTALLTYPE| where {$_.Name -eq 'Standalone'}
$node.'#text'= 'Workstation'
$xml.Save($path)

XML:

<?xml version="1.0" encoding="utf-8" ?>
<Registry>
    <HKEY_LOCAL_MACHINE>
        <SOFTWARE>
            <KOFAX>
                <CONDOR Value="0" Type="integer">
                    <OEMCODE Value="FUJITSU" />
                    <OEMSUBCODE Value="fi6670" />
                    <VRSSERVERS Value="0" Type="integer" />
                    <ECLIPSELOGGING Value="0" />
                    <MULTICOREPOLICY Value="0" Type="integer" />
                    <MULTICOREMODE Value="4" Type="integer" />
                    <MULTICOREQUEUESIZE Value="4" Type="integer" />
                    <MULTICOREDUALSIDEIP Value="1" Type="integer" />
                    <INITVIVONSEPTHREAD Value="1" Type="integer" />
                    <VRSELITEDEMO Value="0" Type="integer" />
                    <DISABLETASKWINDOWS Value="0" Type="integer" />
                    <V1.0>
                        <ERRORAPPPATH>
                            <DEFAULT Value="C:\Program Files (x86)\Kofax\Capture\ImgCtls\bin" />
                        </ERRORAPPPATH>
                        <HELPPATH>
                            <DEFAULT Value="C:\ProgramData\Kofax\Vrs\Help" />
                        </HELPPATH>
                        <KFXSCAN.PXW>
                            <DEFAULT_SOURCE Value="Fujitsu fi-6670A with VRS with AIPE" />
                        </KFXSCAN.PXW>
                        <SCANNERID>
                            <SELECTED Value="Fujitsu fi-6670A" />
                        </SCANNERID>
                    </V1.0>
                    <VERSION Value="V5.1.0265" />
                    <KOFAXVERSION Value="5.1.1.13.0.2084" />
                    <PATH Value="C:\Program Files (x86)\Kofax\Capture\ImgCtls\" />
                </CONDOR>
                <VIRTUALRESCAN>
                    <SILENTINSTALL Value="FALSE" />
                    <ADMININFO>
                        <ASCENTINSTALL Value="FALSE" />
                    </ADMININFO>
                    <SHAREDELEMENTFOLDER Value="C:\ProgramData\Kofax\Vrs\Shared" />
                    <SHAREDELEMENTSERVER Value="" />
                    <VRSLANGUAGE Value="" />
                    <VRSLANGUAGEID Value="0" Type="integer" />
                    <KCLANGUAGE Value="" />
                    <PROFILESYNCTIME Value="3" Type="integer" />
                    <SYNCTIMETICKS Value="" />
                    <INSTALLDIRECTORY Value="C:\Program Files (x86)\Kofax\Capture\ImgCtls\" />
                    <INSTALLTYPE Value="Standalone" />
                    <ORIGINALINSTALLTYPE Value="Standalone" />
                </VIRTUALRESCAN>
                <KOFAX_ISIS_SCANNER_SOURCE>
                    <SOURCE_NAME Value="Fujitsu fi-6670A with VRS with AIPE" />
                </KOFAX_ISIS_SCANNER_SOURCE>
                <KOFAX_TWAIN_DATA_SOURCE>
                    <SOURCE_NAME Value="Fujitsu fi-6670A with VRS with AIPE" />
                </KOFAX_TWAIN_DATA_SOURCE>
            </KOFAX>
            <KOFAX_IMAGE_PRODUCTS>
                <VIRTUALRESCAN>
                    <INSTALLDIRECTORY Value="C:\Program Files (x86)\Kofax\Capture\ImgCtls\" />
                    <PRODUCTCODE Value="{12345678-1234-1234-1234-123456789101}" />
                    <ADMININFO>
                        <ACCEPTEDEULA Value="TRUE" />
                        <ACTIVATEREMINDERDAYS Value="1" />
                        <AFFINITYID Value="000000" />
                        <ASCENTINSTALL Value="FALSE" />
                        <COMPANY Value="" />
                        <EMAIL Value="" />
                        <GRACENOTIFIED Value="FALSE" />
                        <INSTALLDIRECTORY Value="C:\Program Files (x86)\Kofax\Capture\ImgCtls" />
                        <LASTACTIVATEREMINDER Value="0x00" />
                        <LICENSEACTION Value="" />
                        <LICENSECODE Value="" />
                        <PARTNUMBER Value="" />
                        <PRODUCTCODE Value="" />
                        <REGISTERED Value="FALSE" />
                        <SENDEMAIL Value="TRUE" />
                        <SERIALNUMBER Value="" />
                        <SILENTINSTALL Value="FALSE" />
                        <SKIPREGISTRATION Value="FALSE" />
                        <STARTMENUFOLDER Value="" />
                        <USERNAME Value="" />
                    </ADMININFO>
                </VIRTUALRESCAN>
            </KOFAX_IMAGE_PRODUCTS>
        </SOFTWARE>
    </HKEY_LOCAL_MACHINE>
    <HKEY_CURRENT_USER>
        <SOFTWARE>
            <KOFAX>
                <CONDOR>
                    <V1.0>
                        <SETTINGS>
                            <HWERRORS Value="1" Type="integer" />
                            <STOPMODE Value="3" Type="integer" />
                            <ELEVATELICENSE Value="None" />
                            <IGNORECAPTURELICENSE Value="0" Type="integer" />
                            <LEGACYBCLICENSE Value="0" Type="integer" />
                            <PERFORMHOSTSMOOTHING Value="0" Type="integer" />
                            <UPGRADECAPTURELICENSE Value="0" Type="integer" />
                        </SETTINGS>
                    </V1.0>
                </CONDOR>
            </KOFAX>
        </SOFTWARE>
    </HKEY_CURRENT_USER>
</Registry>

Сообщение об ошибке:

Свойство "#текст "не найден для этого объекта. Убедитесь, что свойство существует и может быть установлено. В строке: 5 символов: 1 + $ узел. '# Text' = 'Рабочая станция' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: PropertyNotFound

1 Ответ

2 голосов
/ 29 октября 2019

Используйте XPath!

Для выбора узла INSTALLTYPE с помощью XPath:

# Query document for INSTALLTYPE nodes at any level
$installTypeNodes = $xml.SelectNodes('//INSTALLTYPE')

# Iterate over the nodes found
foreach($installTypeNode in $installTypeNodes){
  # Test if `Value` attribute has expected value
  if($installTypeNode.Value -eq 'Standalone'){
    # Overwrite it if so
    $installTypeNode.Value = 'Workstation'
  }
}

Повторите для узла ELEVATELICENSE перед вызовом $xml.Save() :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...