Get App-V 5.x Publishing Time with PowerShell

When publishing App-V 5.x applications it is interesting to know how long it takes to publish all applications. I needed this information during a large scale test to get a better understanding of the impact on the user experience. I also wanted to know if the publishing time increases when more users are active. This information can be used to optimize the publishing time and eventually the user experience.

In this blog post I will share a powershell function that can get the App-V publishing time on a remote specific machine.

Where do we get the data from?

With App-V 5.x the publishing events are logged in the event viewer. Event 19001 is the event which will indicate publishing has started. The time of this event is our starting point.


Event 19002 is the closing event which indicates the publishing is finished.


Based on the time between the two events we can calculate the time during these events. This will result in the total publishing time of App-V.

Powershell function

With the following powershell function you can get the publishing time on a remote computer. The function will always get the latest publishing time.

The text based version of the powershell function can be found here.
Run the command as followed:

The variable “PublishedData” contains the following information:


$PublishedData.ComputerName – The computer name that is used as the parameter
$PublishedData.PublishTime – The duration of the publishing the App-V applications in seconds
$PublishedData.LastPublishTime – The date & time of the last publishing action

If the variable $PublishedData.PublishTime does not contain a value the publishing is probably not finished.

The powershell function can provide valuable information to get an overview of the App-V 5.x publishing time in your environment. If you have any questions or comments please leave a comment below.


  • Hi,
    great idea. But a Little bit slow. 🙁
    Speed up the Get-Winevent with the Filterhashtable Command. Get only the last 2 Events within the last 2 Days.
    So you got the result immediatly.

    $startTime = (Get-Date).AddDays(-2)
    # Get the used event-logs of the target machine
    #$EventLogs = Get-WinEvent -LogName “Microsoft-AppV-Client/Operational” -ComputerName “$ClientName” | Where-Object {$_.ID -eq “19001” -or $_.ID -eq “19002”}
    $EventLogs = Get-WinEvent -FilterHashTable @{LogName = “Microsoft-AppV-Client/Operational” ; ID=19001,19002; StartTime=$StartTime} -ComputerName “$ClientName” -ErrorAction SilentlyContinue -MaxEvents 2

    Regards from Germany

    • Hi Frank,

      I just tried it and it works perfectly! Thanks for the tip!
      I will update the blog post later this week!