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
-
# Set-CitrixPSVersion.ps1
-
# 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"
-
$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 »
