An administrator here came to me and asked me about how to Powershell around a problem with the App-V 5.0 Client Cache directory. The implementation configured is that App-V uses a folder on the D disk. This disk is dedicated. It is not on the distributed Vdisk. When the server reboots the cache becomes corrupted and the App-V service does not start. A sync is necessary in order to start the App-V 5.0 service. I made a script that clears a few reg values, deletes the App-v Client Connection Groups, App-V Client Packages, the AppV folder in Programdata and the entire folder on the D disk.
I handed over the script to the administrator and asked him to create a scheduled task that run at system startup. The reason for running the script this way, is that creating a GPO that run a Powershell script will not statisfy the required security context. The SYSTEM account doesn’t have enought permissions to complete the script. PSRemoting will not work either. When running the script on another server with the Invoke-Command -Scriptblock {} fails. This is probably due to a bug in App-V. The account has enough rights and UAC is disabled. Yet all attempts fail. Please review the script before implementing
<#Script Variables#> $ServiceName = "AppVClient" $ProgramDataAppV = "C:\ProgramData\Microsoft\AppV" $AppVData = "D:\App-V 5.0" <#Regvalues#> $Regvalues=@() $Regvalues +=@{Regvalue="HKLM:\SOFTWARE\Microsoft\AppV\Client\PackageGroups"} $Regvalues +=@{Regvalue="HKLM:\SOFTWARE\Microsoft\AppV\Client\Packages"} $Regvalues +=@{Regvalue="HKLM:\SOFTWARE\Microsoft\AppV\Client\Streaming\Packages"} #Service stoppen om Program Data te verwijderen. $State = Get-Service $ServiceName If ($State.status -NotMatch "Stopped"){Stop-Service $ServiceName Start-Sleep -s 5} Remove-Item $ProgramDataAppV -force -recurse #Verwijderen van de Registersleutels Foreach ($item in $Regvalues){If ((Test-Path $item.Regvalue) -ne $True){Remove-item $item.regvalue -force -Recurse}} #Service Starten om initiele synch uit te voeren zodat de D schijf wordt vrijgegeven. $State = Get-Service $ServiceName If ($State.status -Match "Stopped"){Start-Service $ServiceName Start-Sleep -s 5} Get-AppvPublishingServer | Sync-AppvPublishingServer #Service Stoppen om Packages en AppvClientConnectionGroup te verwijderen. $State = Get-Service $ServiceName If ($State.status -NotMatch "Stopped"){ Write-Host Stoppen Stop-Service $ServiceName Start-Sleep -s 5} Get-AppvClientConnectionGroup -all | Remove-AppvClientConnectionGroup Get-AppvClientPackage -all | Remove-AppvClientPackage Start-Sleep -s 10 #Service stoppen om App-v folder op de D schijf te verwijderen. If ($State.status -NotMatch "Stopped"){Stop-Service $ServiceName Start-Sleep -s 5} Remove-Item $AppVData -Force -Recurse Start-Sleep -s 10 #Check of de folder ook daadwerkelijk verwijderd is. If ((Test-Path $AppVData) -eq $True){ #Proberen de D schijf leeg te krijgen door eerst te synchen Get-AppvPublishingServer | Sync-AppvPublishingServer Start-Sleep -s 5 $State = Get-Service $ServiceName If ($State.status -NotMatch "Stopped"){Stop-Service $ServiceName Start-Sleep -s 5} Get-AppvClientConnectionGroup -all | Remove-AppvClientConnectionGroup Get-AppvClientPackage -all | Remove-AppvClientPackage Start-Sleep -s 10 Remove-Item $AppVData -Force -Recurse #Laatste check op de D schijf om te kijken of de folder nu daadwerkelijk weg is. If ((Test-Path $AppVData) -eq $True){ $Outinfo = "De App-V Data op de D Schijf is na twee pogingen niet succesvol verwijderd. Bekijk het logboek." Add-Content -Value $Outinfo -Path "C:\ScriptFout.txt" $Outinfo = Get-Date Add-Content -Value $Outinfo -Path "C:\ScriptFout.txt" }} #Laatste Sync uitvoeren Get-AppvPublishingServer | Sync-AppvPublishingServer