func GetWUAUpdates()

in ospatch/updates_windows.go [184:229]


func GetWUAUpdates(ctx context.Context, session *packages.IUpdateSession, classFilter, kbExcludes, exclusivePatches []string) (*packages.IUpdateCollection, error) {
	// Search for all not installed updates but filter out ones that will be installed after a reboot.
	filter := "IsInstalled=0 AND RebootRequired=0"
	clog.Debugf(ctx, "Searching for WUA updates with query %q", filter)
	updts, err := session.GetWUAUpdateCollection(ctx, filter)
	if err != nil {
		return nil, fmt.Errorf("GetWUAUpdateCollection error: %v", err)
	}
	if len(classFilter) == 0 && len(kbExcludes) == 0 && len(exclusivePatches) == 0 {
		return updts, nil
	}
	defer updts.Release()

	count, err := updts.Count()
	if err != nil {
		return nil, err
	}
	clog.Debugf(ctx, "Found %d total updates avaiable (pre filter).", count)

	newUpdts, err := packages.NewUpdateCollection()
	if err != nil {
		return nil, err
	}

	clog.Debugf(ctx, "Using filters: Excludes: %q, Classifications: %q, ExclusivePatches: %q", kbExcludes, classFilter, exclusivePatches)
	for i := 0; i < int(count); i++ {
		updt, err := updts.Item(i)
		if err != nil {
			return nil, err
		}

		ok, err := checkFilters(ctx, updt, kbExcludes, classFilter, exclusivePatches)
		if err != nil {
			return nil, err
		}
		if !ok {
			continue
		}

		if err := newUpdts.Add(updt); err != nil {
			return nil, err
		}
	}

	return newUpdts, nil
}