I'm trying to get a script to get the version (32 or 64 bits) of different INF drivers and then install the one corresponding to the version of the system.
# GET THE PATH OF THE INF FILES IN A FOLDER$INF_PATH = gci $PSScriptRoot -Recurse -Filter "*.inf" | ? {$_.Attributes -ne "Directory"} | % {$_.FullName}# GET THE OS VERSION IN THE INF (64 or 86)$INF_OS_VERSION = ([regex]::matches((Get-Content $INF_PATH | Select-String -Pattern '^"Models, NT' | % {$_.Line.split(",")[1]}) , '\d{2}') | % {$_.value})# GET THE OS VERSION OF THE SYSTEM (64 or 86)$SYS_OS_VERSION = ((Get-WmiObject Win32_OperatingSystem).OSArchitecture).Substring(0,2)$RESULT = $INF_PATH | ? {($INF_OS_VERSION -eq $SYS_OS_VERSION)}$RESULT
In this case I've got two INF, one 64 bits, one 32 bits, but instead of returning only one path of the INF (in 64 bits in my case), it returns both!
Can you see what I did wrong?
Thank you in advance,
Powershell
Last Comment
SubSun
8/22/2022 - Mon
SubSun
Can you post the sample line which you trying to match in the inf file?
footech
I don't see any correlation between $INF_PATH and $INF_OS_VERSION, meaning there's nothing that binds them together, and so your Where-Object comparison has no meaning.
Easiest way to troubleshoot would be if you could provide both .INFs.
Johann Buve
ASKER
Hi,
I attached the *.inf files (I just changed the extension to *.txt or I couldn't upload them).
As you will see, there are actually more datas extracted from the *.inf of the print drivers (the OS, the driver name, the description language)
These files are just for the PS versions of the drivers, but (of course) there are more.
# SET THE PRINT DESCRIPTION LANGUAGE (PCL, PCL6, PS)$MFP_DESC = "PS"# GET THE PATH OF THE INF FILES IN A FOLDER$INF_PATH = gci $PSScriptRoot -Recurse -Filter "*.inf" | ? {$_.Attributes -ne "Directory"} | % {$_.FullName}# GET THE OS VERSION IN THE INF (64 or 86)$INF_OS_VERSION = ([regex]::matches((Get-Content $INF_PATH | Select-String -Pattern '^"Xerox"=Models, NT' | % {$_.Line.split(",")[1]}) , '\d{2}') | % {$_.value})# GET THE OS VERSION OF THE SYSTEM (64 or 86)$SYS_OS_VERSION = ((Get-WmiObject Win32_OperatingSystem).OSArchitecture).Substring(0,2)# GET THE PRINT DESCRIPTION LANGUAGE (PCL, PCL6, PS)$INF_DRIVER = ([regex]::matches((Get-Content $INF_PATH | Select-String -Pattern "^Xerox_UPD_1="), '\"(.+?)\"') | % {$_.value.replace('"','')})$INF_DESC = $INF_DRIVER | % {$_.split()[2]}# GET THE PATH DEPENDING ON THE OS VERSION (64 IN MY CASE) AND THE LANGUAGE DESCRIPTION (PS IN MY CASE)$RESULT = $INF_PATH | ? {($INF_OS_VERSION -eq $SYS_OS_VERSION) -and ($INF_DESC -eq $MFP_DESC)}$RESULT
I tried and it works perfectly!
Thank you a lot Subsun!
SubSun
You're Welcome!.. hope you are clear what was wrong with your code. If you don't have further questions about the script.. the don't forget to close the question :-)