Carl Webster Accessibility Statement

Carl Webster is committed to facilitating the accessibility and usability of its website,, for everyone. Carl Webster aims to comply with all applicable standards, including the World Wide Web Consortium’s Web Content Accessibility Guidelines 2.0 up to Level AA (WCAG 2.0 AA). Carl Webster is proud of the efforts that we have completed and that are in-progress to ensure that our website is accessible to everyone.

If you experience any difficulty in accessing any part of this website, please feel free to email us at and we will work with you to provide the information or service you seek through an alternate communication method that is accessible for you consistent with applicable law (for example, through telephone support).

  • Citrix Provisioning Services Health Check Script Update Version 2.00

    March 14, 2022

    PowerShell, PVS

    Image with me, please. Either you are a new Citrix admin or a consultant tasked with updating/upgrading a Citrix PVS 6.x or 7.x Farm with multiple servers. What do you use to verify that all the servers have:

    • The same Network Advanced Server items
    • The same settings from the configuration wizard
    • The same Server Bootstrap settings
    • The same DisableTaskOffload registry key value
    • PVS services configured properly
    • PVS services failure actions configured properly
    • Are there any vDisks past the Farm merge setting
    • Are there any empty Device Collections
    • Are there any vDisks not associated with any Target Device
    • Do any of the servers have bad streaming IP addresses
    • Registry keys set the same across all server
    • Are there any vDisks configured for server-side caching
    • Do they have the same Windows Updates
    • Do they have the same Windows components installed
    • Are the PVS processes working
    • Are there any Farm or Server items that need reviewing
      • Hardware configuration
      • Hard drive configurations
      • Processor configurations
      • NIC configurations
    • Citrix components

    There is nothing publicly available from Citrix to help you assess the overall health and configuration of a Citrix PVS Farm. That is the purpose behind the PVS Health Check script. The V2 update now supports HTML and Word/PDF output in addition to plain text output. You can also generate multiple outputs in one run.

    I want to thank all the testers who spent weeks testing all the updates. I want to especially thank the testers who sent sample reports and who found bugs and worked with me to test the fixes. This script is better because of their help.

    Version 2.00 14-Mar-2022

    • Added MultiSubnetFailover to Farm Status section
      • Thanks to Arnaud Pain
      • I can’t believe no one has asked for this since PVS 7.11 was released on 14-Sep-2016
    • Added the following functions to support Word/PDF and HTML output and new parameters:
      • AddHTMLTable
      • AddWordTable
      • CheckWordPrereq
      • FindWordDocumentEnd
      • FormatHTMLTable
      • GetCulture
      • Get-LocalRegistryValue
      • Get-RegistryValue
      • OutputauthGroups
      • OutputNotice
      • OutputReportFooter
      • OutputWarning
      • ProcessDocumentOutput
      • SaveandCloseDocumentandShutdownWord
      • SaveandCloseHTMLDocument
      • Set-DocumentProperty
      • SetupWord
      • SetWordCellFormat
      • SetWordHashTable
      • SetWordTableAlternateRowColor
      • Test-RegistryValue
      • UpdateDocumentProperties
      • ValidateCompanyName
      • ValidateCoverPage
      • validObject
      • validStateProp
      • WriteHTMLLine
      • WriteWordLine
    • Added the following parameters:
      • AddDateTime
      • CompanyAddress
      • CompanyEmail
      • CompanyFax
      • CompanyName
      • CompanyPhone
      • CoverPage
      • HTML
      • MSWord
      • PDF
      • ReportFooter
      • Text
      • UserName
    • Any Function in this script not listed anywhere else in this changelog was updated to support Word/PDF and HTML output
    • Changed all file names by adding a V2 somewhere in the name
    • Changed the date format for the transcript and error log files from yyyy-MM-dd_HHmm format to the FileDateTime format
      • The format is yyyyMMddTHHmmssffff (case-sensitive, using a 4-digit year, 2-digit month, 2-digit day, the letter T as a time separator, 2-digit hour, 2-digit minute, 2-digit second, and 4-digit millisecond)
      • For example: 20221225T0840107271
    • Dropped support for PVS 5. The V1.25 script still supports PVS 5.x
    • Fixed a bug in Function GetInstalledRolesAndFeatures that didn’t handle the condition of no installed Roles or Features
      • Thanks to Arnaud Pain for reporting this
    • Fixed a bug when retrieving a Device Collection’s Administrators and Operators
      • I was not comparing to the specific device collection name, which returned all administrators and operators for all device collections and not the device collection being processed
    • Fixed a bug with handling a PVS server with multiple NICs and multiple IPv4 addresses
      • This bug has existed since I created the script in 2012
      • I changed the $Script:NICIPAddresses array from @{} to New-Object System.Collections.ArrayList
      • Updated Function ProcessPVSSite to use Get-NetIPAddress -CimSession to get all the IPv4 addresses
      • This allows the gathering of IPv4 addresses regardless of the OS or PVS version
      • Updated Function GetBadStreamingIPAddresses to work with the new array type for $Script:NICIPAddresses
    • Format the Farm, Properties, Status section to match the console output
    • In Function DeviceStatus, change the output of the Target device’s active/inactive status and license type
    • In Function GetBootstrapInfo, for HTML output, check if any array items exist before outputting a blank table with only column headings
    • In Function GetConfigWizardInfo, fix $PXEServices to work with PVS7+
      • If DHCPType is equal to 1073741824, then if PXE is set to PVS, in PVS V6, PXEType is set to 0, but in PVS7, PXEType is set to 1
      • Updated the function to check for both 0 and 1 values
    • In Function GetDisableTaskOffloadInfo, changed the value of $TaskOffloadValue:
      • If the registry value DisableTaskOffload does not exist, from “Missing” to “Not defined”
      • To a String[] so the HTML output works
    • In Function ProcessStores, change the Word/PDF and HTML output to tables instead of individual lines
    • Replaced all Get-WmiObject with Get-CimInstance
    • Replaced most script Exit calls with AbortScript to stop the transcript log if the log was enabled and started
    • Updated the following functions to the latest versions:
      • AbortScript
      • GetComputerWMIInfo
      • line
      • OutputComputerItem
      • OutputDriveItem
      • OutputNicItem
      • OutputProcessorItem
      • ProcessScriptEnd
      • SaveandCloseTextDocument
      • SendEmail
      • SetFilenames
      • SetupText
      • ShowScriptOptions
    • Updated the help text
    • Updated the ReadMe file
    • Went to Set-StrictMode -Version Latest, from Version 2 and cleaned up all related errors
    • You can select multiple output formats

    You can always find the most current script by going to



    About Carl Webster

    Carl Webster is an independent consultant specializing in Citrix, Active Directory, and technical documentation. Carl (aka “Webster”) serves the broader Citrix community by writing articles (see and by being the most active person in the Citrix Zone on Experts Exchange. Webster has a long history in the IT industry beginning with mainframes in 1977, PCs and application development in 1986, and network engineering in 2001. He has worked with Citrix products since 1990 with the premiere of their first product – the MULTIUSER OS/2.

    View all posts by Carl Webster

    No comments yet.

    Leave a Reply