$ErrorActionPreference = 'Stop';

$packageName = 'winfsp'
$softwareName = 'WinFsp*'
$installerType = 'msi'
$silentArgs = '/qn /norestart'
$validExitCodes = @(0, 3010, 1605, 1614, 1641)

[array]$key = Get-UninstallRegistryKey -SoftwareName $softwareName

if ($key.Count -eq 1) {
    $key | % {
        # The Product Code GUID is all that should be passed for MSI, and very
        # FIRST, because it comes directly after /x, which is already set in the
        # Uninstall-ChocolateyPackage msiargs (facepalm).
        $silentArgs = "$($_.PSChildName) $silentArgs"

        # Don't pass anything for file, it is ignored for msi (facepalm number 2)
        # Alternatively if you need to pass a path to an msi, determine that and
        # use it instead of the above in silentArgs, still very first
        $file = ''

        Uninstall-ChocolateyPackage `
            -PackageName $packageName `
            -FileType $installerType `
            -SilentArgs "$silentArgs" `
            -ValidExitCodes $validExitCodes `
            -File "$file"
    }
} elseif ($key.Count -eq 0) {
    # Write-Warning "$packageName is not installed"
} elseif ($key.Count -gt 1) {
    Write-Warning "Too many matching packages found! Package may not be uninstalled."
    Write-Warning "Please alert package maintainer the following packages were matched:"
    $key | % {Write-Warning "- $_"}
}
