# Overview

**OSDCatalog** is the PowerShell Module that I use to generation WSUS XML files for [**OSDBuilder**](https://www.osdeploy.com/osdbuilder) and [**OSDUpdate**](https://www.osdeploy.com/osdupdate).  I didn't develop this for everybody's to use, just for me personally so I wouldn't have to do everything manually, but I have always been one to share my work

Keep in mind this is not 100% ready for your environment, as I've only tested it on my **WSUS Virtual Machine**.  I don't have plans to make this work for YOUR environment, but if you would like to help me with that, feel free to pull from [**GitHub**](https://github.com/OSDeploy/OSDCatalog) and give me a hand

{% hint style="danger" %}
**If you gripe to me about how OSDCatalog doesn't work for you, then I will not send you a Christmas Card**
{% endhint %}


# Release Notes

## 19.8.14 (August 14, 2019)

Made some changes for comment based help to redirect to the new URLs

{% embed url="<https://www.powershellgallery.com/packages/OSDCatalog/19.8.14.0>" %}

## 19.8.13 (August 13, 2019)

Initial Release

{% embed url="<https://www.powershellgallery.com/packages/OSDCatalog/19.8.13.0>" %}


# Install and Update

## Install OSDCatalog

The **OSDCatalog** PowerShell Module is installed from the **PowerShell Gallery**.  Use the following commands in PowerShell

```
Install-Module OSDCatalog
Import-Module OSDCatalog -Force
```

## Update OSDCatalog

The easiest way to Update the **OSDCatalog** PowerShell Module is with the following **PowerShell** command

```
Update-ModuleOSDCatalog
```

This will remove previous versions of **OSDDrivers**, and install the latest version

You can also use the following commands

```
Uninstall-Module OSDCatalog -AllVersions -Force
Install-Module OSDCatalog
Import-Module OSDCatalog -Force
```


# Functions


# New-OSDCatalog

## Comment Based Help

```
<#
.SYNOPSIS
Creates Stand Alone Update Catalogs from WSUS.  Used by OSDBuilder and OSDUpdate

.DESCRIPTION
Creates Stand Alone Update Catalogs from WSUS.  Used by OSDBuilder and OSDUpdate

.LINK
https://osdcatalog.osdeploy.com/module/functions/new-osdcatalog

.PARAMETER WsusServer
WSUS Server Name

.PARAMETER WsusPort
WSUS Server Port.  Defaults to 8530

.PARAMETER CatalogName
Custom Catalog Name.  Default Name is the WSUS Update Category Name

.PARAMETER DownloadUri
Mirrors the selected Internet or WSUS Uri location.  Useful for hiding WSUS Server Information from Results

.PARAMETER GridViewGetUpdates
Select the GetUpdates in GridView before the Files are processed

.PARAMETER GridViewResults
Select the Results in GridView before the XML is created

.PARAMETER SaveDirectory
Directory to save the exported CliXml Catalogs

.PARAMETER UpdateCategory
Sets the Update Category.  If omitted, all Update Categories will be presented in GridView

.PARAMETER UpdateTextIncludes
Optionally search for the specified string in the WSUS Database

.PARAMETER UpdateTextNotIncludes
Removes results that contain the specified string

.PARAMETER OSDeployCatalog
Generates Update Catalogs used by OSDUpdate and OSDBuilder

#   Other Great Links
#   https://www.powershellgallery.com/packages/PoshWSUS
#   https://devblogs.microsoft.com/scripting/get-windows-update-status-information-by-using-powershell/
#   https://www.reddit.com/r/PowerShell/comments/3b979k/wsus_updates_combining_the_results_of_two/
#>
```


# Update-ModuleOSDCatalog

## Comment Based Help

```
<#
.SYNOPSIS
Updates the OSDCatalog PowerShell Module to the latest version

.DESCRIPTION
Updates the OSDCatalog PowerShell Module to the latest version from the PowerShell Gallery

.LINK
https://osdcatalog.osdeploy.com/module/functions/update-moduleosdcatalog

.Example
Update-ModuleOSDCatalog
#>
```


# WSUS Server

## Server Virtual Machine

For starters I have this running on a Virtual Machine.  WSUS is the only purpose of this Virtual Machine.  The Server Name is WSUS

## Update Source and Proxy Server

I've configured it as a standalone Server and have it set to Synchronize WSUS from Microsoft Update

![](/files/-LmDcWJOHcii9NjrrbEI)

## Update Files and Languages

I don't even store content on the Server, all I care about is the links

![](/files/-LmDdHvHK-k31lh76i-O)

## Products and Classifications

And finally I make sure to select the proper Products

![](/files/-LmDdoA5HWdHc2jwzJiy)

And Classifications

![](/files/-LmDe-tUqjU1ZnBz5uW2)


# Commands

These are the commands that I use to generate the XML files ... they are saved locally and added to **OSDBuilder** and **OSDUpdate**

## Windows Catalogs (Version 10.0)

```
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Windows 10"
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Windows 10 1903"
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Windows 10 Dynamic Update"
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Windows Server 2016"
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Windows Server 2019"
```

## Windows Catalogs (Legacy)

```
Import-Module OSDCatalog -Force

New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Windows 7" -GridViewGetUpdates -GridViewResults
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Windows Server 2012 R2" -GridViewGetUpdates -GridViewResults
```

## Windows Addons (version 10.0)

```
Import-Module OSDCatalog -Force

New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Windows 10 Feature On Demand"
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Windows 10 Language Packs"
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Windows 10 Language Interface Packs"
```

## Office Catalogs

```
Import-Module OSDCatalog -Force
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Office 2016 32-Bit"
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Office 2016 64-Bit"
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Office 2013 32-Bit"
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Office 2013 64-Bit"
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Office 2010 32-Bit"
New-OSDCatalog -WsusServer WSUS -SaveDirectory $env:TEMP -OSDeployCatalog "Office 2010 64-Bit"
```


# Proofing

And finally there is a bit of proofing that I do before publishing the XML files, but I'll have to add to this later


