Closed thomas-ingle closed 1 year ago
Hello!
I've implemented the list from GPO in a function now in the original WAU after @Weatherlights proposed it in https://github.com/Romanitho/Winget-AutoUpdate/discussions/256#discussioncomment-4710599
But to make it work I had to convert the list from registry to an array of strings (from an array of properties) to make it work with the comparison -contains
, maybe that's the case here?
I don't know how the list from GPO is pulled in Winget-AutoUpdate-Intune, but it feels like maybe that can be the problem...
...here's the Included part:
function Get-IncludedApps {
if ($GPOList) {
if (Test-Path "HKLM:\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate\WhiteList") {
$Key = 'HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate\WhiteList\'
$ValueNames = (Get-Item -Path "HKLM:\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate\WhiteList").Property
foreach ($ValueName in $ValueNames) {
$AppIDs = [Microsoft.Win32.Registry]::GetValue($Key, $ValueName, $false)
[PSCustomObject]@{
Value = $ValueName
Data = $AppIDs.Trim()
}
}
}
return $AppIDs
}
elseif (Test-Path "$WorkingDir\included_apps.txt") {
return (Get-Content -Path "$WorkingDir\included_apps.txt").Trim() | Where-Object { $_.length -gt 0 }
}
}
In Winget-Upgrade.ps1:
#Fix and count the array if GPO List as ERROR handling!
if ($GPOList) {
if ($UseWhiteList) {
$WhiteList = $toUpdate.GetUpperBound(0)
if ($null -eq $WhiteList) {
Write-Log "Critical: Whitelist doesn't exist in GPO, exiting..." "Red"
New-Item "$WorkingDir\logs\error.txt" -Value "Whitelist doesn't exist in GPO!" -Force
Exit 1
}
$toUpdate = $toUpdate.Data
}
else {
$BlackList = $toSkip.GetUpperBound(0)
if ($null -eq $BlackList) {
Write-Log "Critical: Blacklist doesn't exist in GPO, exiting..." "Red"
New-Item "$WorkingDir\logs\error.txt" -Value "Blacklist doesn't exist in GPO!" -Force
Exit 1
}
$toSkip = $toSkip.Data
}
}
/.../
#If White List
if ($UseWhiteList) {
#For each app, notify and update
foreach ($app in $outdated) {
if (($toUpdate -contains $app.Id) -and $($app.Version) -ne "Unknown") {
Update-App $app
}
#if current app version is unknown
elseif ($($app.Version) -eq "Unknown") {
Write-Log "$($app.Name) : Skipped upgrade because current version is 'Unknown'" "Gray"
}
#if app is in "excluded list"
else {
Write-Log "$($app.Name) : Skipped upgrade because it is not in the included app list" "Gray"
}
}
}
...
Hey @thomas-ingle
Sorry for the late reply. What you try to configure it looks totally fine and "should" work as you expect it. But for the start I would need a little more input from you.
Can you check wether the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Policies\weatherlights.com\Winget-AutoUpdate\UseWhiteList is set to 1 or 0 (or does not exist at all) aswell as the existence of the file %PROGRAMDATA%\Winget-AutoUpdate-Configurator\included_apps.txt and the LastCommand.txt file includes the -UseWhiteList parameter
If the key exist and is set to 1 please also check if the key is set to 1: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate\WAU_UseWhiteList
It is also helpfull if you can provide the log files as described here.
I also changed a behaviour where WAU would be enabled even if there is no policy is place... this had the effect that everything is updated (running WAU simply 'as is' without any lists). With the newest version this is has changed so WAU will not run unless a policy tells it to do so. So an explaination could be the app was installed (and launched) before the policy was applied... ADMX backed policies take a littler longer for intune to process since they require two sync cycles to be fully active.
Hey @KnifMelti
thanks for the input :). My mechanism is very simply: Before I configure WAU I convert the registry content in a corresponding txt file which is referenced upon the configuration of WAU. So I generate a list and then reference it.
The dump is simple by accessing an invisible attribute of the PSObject and then only get me the list elements (so keys that are numbers).
ForEach ( $item in $list.PSObject.Properties | where { $_.Name -match "[0-9]+" } ) { $parsedList += $item.Value + "``n" }
I try to build around WAU rather not within WAU to keep the level complexity low on my end :).
Nice! Mind if I reuse the ForEach ( $item in $list.PSObject.Properties | where { $_.Name -match "[0-9]+" } ) { $parsedList += $item.Value + "``n" }
in WAU?
...changed my mind, but thanks (I have a stable Function now - have just begun coding in PS)!
I wouldn't have guessed that :D. But yea in the no need to screw something up just for the looks :).
This issue is stale because it has been open for 30 days with no activity.
This issue was closed because it has been inactive for 14 days since being marked as stale.
Have configured the Application List policy to include only apps we want to update. I have also configured the Use White List instead of Black List policy to enabled and applications not in the list are being updated. Is something backwards here? Can't find an explanation.