Set-CitrixPSVersion.ps1 (Citrix Top 10)
I am constantly looking for content for my blog and tasks that can be automated. I believe this helps me learn and helps other with their needs.
In this search I was directed to convert/write Powershell examples for scripts located here http://community.citrix.com/display/cdn/Script+Exchange
Here is the first of those scripts.
Name: Set-CitrixPSVersion.ps1
Purpose: Sets PS Version on a Server, List of Servers, or all Servers in the Farm
# Brandon Shell [MVP]
# www.bsonposh.com
# Sets PS Version on a Server, List of Servers, or all Servers in the Farm
Param($file,$server,$PSVer,[switch]$help,[switch]$all,[switch]$whatif,[switch]$show,[switch]$verbose)
function HelpMe{
Write-Host
Write-Host " Set-CitrixPSVersion.ps1:" -fore Green
Write-Host " Sets PS Version on a Server, List of Servers, or all Servers in the Farm"
Write-Host
Write-Host " Parameters:" -fore Green
Write-Host " -File <fileName> : Optional. Name of the File of Servers"
Write-Host " -Server <serverName> : Optional. Name of the Server to Change"
Write-Host " -Verbose : Optional. Enables Verbose Output"
Write-Host " -All : Optional. Sets Version on all Servers [Requires -Server]"
Write-Host " -Show : Optional. Displays the Version for Server(s)"
Write-Host " -Help : Optional. Displays This"
Write-Host " -Whatif : Optional. Will not Commit Info just Display what would change"
Write-Host
Write-Host " Examples:" -fore Green
Write-Host " Set PS Version on Server1 to STD" -fore White
Write-Host " .\Set-CitrixPSVersion.ps1 -Server Server1 -psver STD " -fore Yellow
Write-Host
Write-Host " Set PS Version on Servers in a File" -fore White
Write-Host " .\Set-CitrixPSVersion.ps1 -file c:\Mylist.txt -psver STD " -fore Yellow
Write-Host
Write-Host " Get PS Version from ALL server" -fore White
Write-Host " .\Set-CitrixPSVersion.ps1 -all -Server myzdcserver" -fore Yellow
Write-Host
Write-Host " Product Edition Options" -fore Green
Write-Host " STD = Citrix Presentation Server Standard Edition" -fore White
Write-Host " ADV = Citrix Presentation Server Advanced Edition" -fore White
Write-Host " ENT = Citrix Presentation Server Enterprise Edition" -fore White
Write-Host " PLT = Citrix Presentation Server Platinum Edition" -fore White
Write-Host
}
function Ping-Server {
Param($srv)
$pingresult = Get-WmiObject win32_pingstatus -f "address=’$srv’"
if($pingresult.statuscode -eq 0) {$true} else {$false}
}
function Set-PSVer{
Param($srv)
Write-Verbose " Getting Citrix Server Object"
$type = [System.Type]::GetTypeFromProgID("MetaframeCOM.MetaframeServer",$srv)
$mfsrv = [system.Activator]::CreateInstance($type)
$mfsrv.Initialize(6,$srv)
if(!$?){Write-Host " – Server [$srv] threw and Error" -fore red;return}
if($show) # Check for $Show and will display only
{
Write-Host " – PS Version for [$srv]: $($mfsrv.WinServerObject.mpsedition)"
return
}
else
{
if($whatif) # Check for $Whatif
{
Write-Host " What if: Performing operation `"Set PS Version [$PSVer]`" on Target `"$srv`"."
}
else
{
Write-Verbose " – Setting PSVer to [$PSVer] on [$srv]"
$mfsrv.WinServerObject.mpsedition = $PSVer
Write-Host " – PS Version for [$srv]: $($mfsrv.WinServerObject.mpsedition)"
}
}
}
function Set-PSALL{
$mfarm = new-Object -com "MetaframeCOM.MetaframeFarm"
$mfarm.Initialize(1)
foreach($mfsrv in $mfarm.Servers)
{
if($show){Write-Host " – PS Version for [$($mfsrv.ServerName)]: $($mfsrv.WinServerObject.MPSEdition)";continue}
if($whatif){Write-Host " What if: Performing operation `"Set PS Version [$PSVer]`" on Target `"$($mfsrv.ServerName)`"."}
else
{
Write-Verbose " – Setting PSVer to [$PSVer] on [$($mfsrv.ServerName)]"
$mfsrv.WinServerObject.mpsedition = $PSVer
Write-Host " – PS Version for [$($mfsrv.ServerName)]: $($mfsrv.WinServerObject.MPSEdition)"
}
}
}
# Script Setup. Checking Parameters
Write-Host
## Checing Verbose flag
if($verbose){$verbosepreference = "Continue"}else{$erroractionpreference = "SilentlyContinue"}
## Verifying that File/Server was passed. If not or -help I Call HelpMe and close.
if(!$file -and !$server -and !$all -or $help){HelpMe;Return}
## Verify Valid Edition was Passed
if(!$show -and ($PSVer -notmatch "STD|ADV|ENT|PLT"))
{
Write-Host " PS Edition [$PSVER] is NOT Valid. Please use STD, ADV, ENT, or PLT" -fore RED
Write-Host
Return
}
# If $Server and we can ping it we run Set-PSVer against Server
if($server -and (ping-server $server))
{
Set-PSVer $server
Write-host
}
# Check for -File and Verify the file is valid
if($File -and (test-Path $file))
{
Write-Verbose " – Processing File [$file]"
# Process each Server checking for blanks
foreach($Server in (get-Content $file | where{$_ -match "^\S"}))
{
Write-Host " + Processing Server [$Server]"
if(ping-Server $server){Set-PSVer $Server}else{Write-Host " – Ping Failed to [$Server]" -fore Red}
Write-host
}
}
if($all){Set-PSALL}
Write-Host
tshell :: Apr.07.2008 :: All, Citrix, Powershell, Scripting :: No Comments »

