Knightley
Knightley

Reputation: 11

How to change values in XML with Powershell

I have a xml file and i want to change 2 values inside the XML

XML:

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

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

I tested several scripts which are provided in this database, but i am not able to change the values.

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>

Error Message:

The property "#text" was not found for this object. Make sure that the property exists and can be set. In line: 5 characters: 1 + $node.'#text'= 'Workstation' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound

Upvotes: 1

Views: 107

Answers (1)

Mathias R. Jessen
Mathias R. Jessen

Reputation: 174435

Use XPath!

To select the INSTALLTYPE node with 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'
  }
}

Repeat for the ELEVATELICENSE noded before calling $xml.Save() :)

Upvotes: 2

Related Questions