add README.md, fix policy definitions

This commit is contained in:
Ludwig Lehnert
2026-06-29 11:37:12 +00:00
parent fe4733d903
commit 8da5d1d3fa
4 changed files with 111 additions and 4 deletions

View File

@@ -43,8 +43,32 @@
<decimal value="0" /> <decimal value="0" />
</falseValue> </falseValue>
</boolean> </boolean>
<list id="Catalog" key="Software\Policies\STL\Softwarekatalog\Catalog" valuePrefix="Catalog" additive="false" explicitValue="true" /> </elements>
<list id="Required" key="Software\Policies\STL\Softwarekatalog\Required" valuePrefix="Required" additive="false" explicitValue="true" /> </policy>
<policy name="Softwarekatalog_Catalog" class="Machine" displayName="$(string.Softwarekatalog_Catalog)" explainText="$(string.Softwarekatalog_Catalog_Help)" key="Software\Policies\STL\Softwarekatalog" valueName="CatalogPolicy" presentation="$(presentation.Softwarekatalog_Catalog)">
<parentCategory ref="Softwarekatalog" />
<supportedOn ref="windows:SUPPORTED_Windows7" />
<enabledValue>
<decimal value="1" />
</enabledValue>
<disabledValue>
<decimal value="0" />
</disabledValue>
<elements>
<list id="Catalog" key="Software\Policies\STL\Softwarekatalog\Catalog" valuePrefix="Catalog" additive="false" explicitValue="true" required="false" />
</elements>
</policy>
<policy name="Softwarekatalog_Required" class="Machine" displayName="$(string.Softwarekatalog_Required)" explainText="$(string.Softwarekatalog_Required_Help)" key="Software\Policies\STL\Softwarekatalog" valueName="RequiredPolicy" presentation="$(presentation.Softwarekatalog_Required)">
<parentCategory ref="Softwarekatalog" />
<supportedOn ref="windows:SUPPORTED_Windows7" />
<enabledValue>
<decimal value="1" />
</enabledValue>
<disabledValue>
<decimal value="0" />
</disabledValue>
<elements>
<list id="Required" key="Software\Policies\STL\Softwarekatalog\Required" valuePrefix="Required" additive="false" explicitValue="true" required="false" />
</elements> </elements>
</policy> </policy>
</policies> </policies>

View File

@@ -6,14 +6,22 @@
<stringTable> <stringTable>
<string id="Softwarekatalog">Softwarekatalog</string> <string id="Softwarekatalog">Softwarekatalog</string>
<string id="Softwarekatalog_Settings">Softwarekatalog konfigurieren</string> <string id="Softwarekatalog_Settings">Softwarekatalog konfigurieren</string>
<string id="Softwarekatalog_Settings_Help">Aktiviert und konfiguriert den Softwarekatalog. Katalog-Eintraege werden unter HKLM\Software\Policies\STL\Softwarekatalog\Catalog gespeichert. Der Wertname ist der Alias, der Wert hat das Format PackageId|DisplayName|Description. Pflichtsoftware wird unter HKLM\Software\Policies\STL\Softwarekatalog\Required gespeichert. Der Wertname ist der Alias, der Wert ist 1. Der Client liest maximal 500 Eintraege pro Liste.</string> <string id="Softwarekatalog_Settings_Help">Aktiviert den Softwarekatalog und steuert, ob Benutzer Software installieren oder deinstallieren duerfen und ob Pflichtsoftware automatisch installiert wird.</string>
<string id="Softwarekatalog_Catalog">Freigegebene Software konfigurieren</string>
<string id="Softwarekatalog_Catalog_Help">Konfiguriert freigegebene Software unter HKLM\Software\Policies\STL\Softwarekatalog\Catalog. Der Wertname ist der Alias, der Wert hat das Format PackageId|DisplayName|Description. Der Client liest maximal 500 Eintraege.</string>
<string id="Softwarekatalog_Required">Pflichtsoftware konfigurieren</string>
<string id="Softwarekatalog_Required_Help">Konfiguriert Pflichtsoftware unter HKLM\Software\Policies\STL\Softwarekatalog\Required. Der Wertname ist ein Alias aus dem Katalog, der Wert ist 1. Der Client liest maximal 500 Eintraege.</string>
</stringTable> </stringTable>
<presentationTable> <presentationTable>
<presentation id="Softwarekatalog_Settings"> <presentation id="Softwarekatalog_Settings">
<checkBox refId="AllowUserInstalls">Benutzer duerfen Software installieren</checkBox> <checkBox refId="AllowUserInstalls">Benutzer duerfen Software installieren</checkBox>
<checkBox refId="AllowUserUninstall">Benutzer duerfen Software deinstallieren</checkBox> <checkBox refId="AllowUserUninstall">Benutzer duerfen Software deinstallieren</checkBox>
<checkBox refId="EnforceRequired">Pflichtsoftware automatisch installieren</checkBox> <checkBox refId="EnforceRequired">Pflichtsoftware automatisch installieren</checkBox>
</presentation>
<presentation id="Softwarekatalog_Catalog">
<listBox refId="Catalog">Freigegebene Software. Name = Alias, Wert = PackageId|DisplayName|Description.</listBox> <listBox refId="Catalog">Freigegebene Software. Name = Alias, Wert = PackageId|DisplayName|Description.</listBox>
</presentation>
<presentation id="Softwarekatalog_Required">
<listBox refId="Required">Pflichtsoftware. Name = Alias aus Katalog, Wert = 1.</listBox> <listBox refId="Required">Pflichtsoftware. Name = Alias aus Katalog, Wert = 1.</listBox>
</presentation> </presentation>
</presentationTable> </presentationTable>

View File

@@ -6,14 +6,22 @@
<stringTable> <stringTable>
<string id="Softwarekatalog">Software Catalog</string> <string id="Softwarekatalog">Software Catalog</string>
<string id="Softwarekatalog_Settings">Configure Software Catalog</string> <string id="Softwarekatalog_Settings">Configure Software Catalog</string>
<string id="Softwarekatalog_Settings_Help">Enables and configures Software Catalog. Catalog entries are stored below HKLM\Software\Policies\STL\Softwarekatalog\Catalog. Value name is alias, value format is PackageId|DisplayName|Description. Required software is stored below HKLM\Software\Policies\STL\Softwarekatalog\Required. Value name is alias, value is 1. Client reads up to 500 entries per list.</string> <string id="Softwarekatalog_Settings_Help">Enables Software Catalog and controls whether users may install or uninstall software and whether required software is installed automatically.</string>
<string id="Softwarekatalog_Catalog">Configure allowed software</string>
<string id="Softwarekatalog_Catalog_Help">Configures allowed software below HKLM\Software\Policies\STL\Softwarekatalog\Catalog. Value name is alias, value format is PackageId|DisplayName|Description. Client reads up to 500 entries.</string>
<string id="Softwarekatalog_Required">Configure required software</string>
<string id="Softwarekatalog_Required_Help">Configures required software below HKLM\Software\Policies\STL\Softwarekatalog\Required. Value name is a catalog alias, value is 1. Client reads up to 500 entries.</string>
</stringTable> </stringTable>
<presentationTable> <presentationTable>
<presentation id="Softwarekatalog_Settings"> <presentation id="Softwarekatalog_Settings">
<checkBox refId="AllowUserInstalls">Allow users to install software</checkBox> <checkBox refId="AllowUserInstalls">Allow users to install software</checkBox>
<checkBox refId="AllowUserUninstall">Allow users to uninstall software</checkBox> <checkBox refId="AllowUserUninstall">Allow users to uninstall software</checkBox>
<checkBox refId="EnforceRequired">Automatically install required software</checkBox> <checkBox refId="EnforceRequired">Automatically install required software</checkBox>
</presentation>
<presentation id="Softwarekatalog_Catalog">
<listBox refId="Catalog">Allowed software. Name = alias, value = PackageId|DisplayName|Description.</listBox> <listBox refId="Catalog">Allowed software. Name = alias, value = PackageId|DisplayName|Description.</listBox>
</presentation>
<presentation id="Softwarekatalog_Required">
<listBox refId="Required">Required software. Name = catalog alias, value = 1.</listBox> <listBox refId="Required">Required software. Name = catalog alias, value = 1.</listBox>
</presentation> </presentation>
</presentationTable> </presentationTable>

67
README.md Normal file
View File

@@ -0,0 +1,67 @@
# Softwarekatalog
Windows self-service software catalog backed by `winget`.
Users install approved software through a small GUI or request helper. A SYSTEM scheduled task runs a named-pipe daemon, authenticates the connecting Windows user, validates requests against Group Policy, then runs `winget install --scope machine`.
## What It Does
- Reads allowed software from GPO registry policy.
- Lets users install/uninstall only catalog entries allowed by policy.
- Installs required software automatically.
- Runs `winget upgrade --all` every 2 hours.
- Tracks installed state from `winget export`, not from request history.
## Policy
ADMX templates live in `PolicyDefinitions/`.
Copy them to your domain Central Store:
```text
\\<domain>\SYSVOL\<domain>\Policies\PolicyDefinitions\Softwarekatalog.admx
\\<domain>\SYSVOL\<domain>\Policies\PolicyDefinitions\de-DE\Softwarekatalog.adml
\\<domain>\SYSVOL\<domain>\Policies\PolicyDefinitions\en-US\Softwarekatalog.adml
```
Policy registry path:
```text
HKLM\Software\Policies\STL\Softwarekatalog
```
Catalog entries:
```text
HKLM\Software\Policies\STL\Softwarekatalog\Catalog
alias = PackageId|DisplayName|Description
```
Required software:
```text
HKLM\Software\Policies\STL\Softwarekatalog\Required
alias = 1
```
The client reads up to 500 catalog entries and 500 required entries.
## Install
Run as admin or as computer startup script:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\setup.ps1 -Mode Install
```
Generated files are written to:
```text
C:\ProgramData\__Softwarekatalog\
```
## Notes
- Requires Windows, Desktop App Installer, and `winget`.
- The daemon runs as `LocalSystem`; keep catalog policy restricted to trusted admins.
- Package IDs and silent machine-scope support depend on upstream `winget` packages.