Reputation: 11
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
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