LoadEval LoginStatus Load Sessions Max ServerName -------- ----------- ---- -------- --- ---------- Default AllowLogOns 2100 21 100 XenAppSvr
It accepts pipeline input (from get-xaworkergroupserver for instance) and includes handling for the snap-in to avoid the getting the snap-in scope-locked.
xenModules.psm1
<?ps
#Requires -version 2.0
#Requires –PSSnapin Citrix.XenApp.Commands
function get-XALoadDetails{
#.Synopsis
# Gathers XenApp Load Evaluation Data into a single object
#.Description
# Gathers XenApp Load Evaluation Data into a single object, useful for determining load balancing behavior. Requires Citrix Xenapp Powershell snapin.
#.Parameter Server
# Server to pull load Evaluation data from, or enter * or all, to poll the entire farm.
#.Parameter HandleSnapin
# Loads and unloads the Citrix.XenApp.Commands snapin for the script. Default is false.
#.Example
# Show Load Balancing Details for server "2K8-Hamster"
# Get-XALoadDetails -Server 2K8-Hamster
#.Example
# Show Load Balancing Details for all XenApp Servers
# Get-XALoadDetails -Server All
[cmdletbinding()]
param(
# Target Server, or * to pull all Xen Servers
[Parameter(Position=0, Mandatory=$True, ValueFromPipeline=$True)]
[string[]]$server,
# Handle loading the snapin? Default is no.
[Parameter(Position=1, Mandatory=$False)]
[Alias("LS")]
[switch]$handleSnapin
)
BEGIN{
#Handling the Citrix Snapin. If the $handleSnapin is called, CHECK to see if the snapin is loaded before continuing
#If the snapin was already loaded, set $handleSnapin to $false
if($handleSnapin -eq $true){
if ((Get-PSSnapin -name Citrix.XenApp.Commands -ErrorAction SilentlyContinue) -eq $null){
Add-PSSnapin Citrix.XenApp.Commands
}ELSE{
$handleSnapin = $false
}
}
#{Add-PSSnapin citrix*}
$allLoads = Get-XAServerLoad #grab load info ONCE
}PROCESS{
[string[]]$servers = " "
if ($server -eq "*" -or $_ -eq "all")
{$servers = Get-XAServer | sort ServerName | select -expand servername}
ELSE
{$servers = $server}
#if (($server -eq "*") -or ($server -eq "all")){$server = Get-XAServer | sort ServerName | select -expand servername}
$servers
foreach ($server in $servers){
if((Test-Connection -count 1 ($server) -quiet) -eq $true){
"yup"
$3in1 = get-xaserver ($server) -full | select ServerName, SessionCount, LogOnMode
$allEvals = get-xaloadevaluator -server ($3in1.ServerName) | select ServerUserLoad, LoadEvaluatorName
$obj = New-Object PSObject -Property @{
MaxSessions = $allEvals.ServerUserLoad
LoadEvaluator = $allEvals.LoadEvaluatorName
LoginStatus = $3in1.LogOnMode
Load = $allLoads | where{($3in1.ServerName) -eq $server.ServerName} | select -expand Load
Sessions = $3in1.SessionCount
ServerName = $3in1.Servername
}
$obj.pstypenames.Insert(0,'xenModule.LoadDetails')
$obj
}
}
}END{
#Remove PSSnapin if it wasn't loaded before, to avoid scope locking
if($handleSnapin -eq $true){Remove-PSSnapin Citrix.XenApp.Commands
}
}
}##End of get-XALoadDetails Function
export-modulemember -function get-XALoadDetails
xenModules.psd1
<?ps
#Requires –PSSnapin Citrix.XenApp.Commands
#
# Module manifest for module 'xenModules'
#
# Generated by: Jared Shippy
#
# Generated on: 04/03/2014
#
@{
# Script module or binary module file associated with this manifest
# RootModule = ''
ModuleToProcess = 'xenModules.psm1'
# Version number of this module.
ModuleVersion = '1.0'
# ID used to uniquely identify this module
#GUID = 'd0a9150d-b6a4-4b17-a325-e3a24fed0aa9'
# Author of this module
Author = 'Jared Shippy'
# Company or vendor of this module
#CompanyName = 'Unknown'
# Copyright statement for this module
#Copyright = '(c) 2012 User01. All rights reserved.'
# Description of the functionality provided by this module
# Description = ''
# Minimum version of the Windows PowerShell engine required by this module
#PowerShellVersion = '2'
# Name of the Windows PowerShell host required by this module
# PowerShellHostName = ''
# Minimum version of the Windows PowerShell host required by this module
# PowerShellHostVersion = ''
# Minimum version of the .NET Framework required by this module
# DotNetFrameworkVersion = ''
# Minimum version of the common language runtime (CLR) required by this module
# CLRVersion = ''
# Processor architecture (None, X86, Amd64) required by this module
# ProcessorArchitecture = ''
# Modules that must be imported into the global environment prior to importing this module
# RequiredModules = @()
# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()
# Script files (.ps1) that are run in the caller's environment prior to importing this module
# ScriptsToProcess = @()
# Type files (.ps1xml) to be loaded when importing this module
# TypesToProcess = @()
# Format files (.ps1xml) to be loaded when importing this module
FormatsToProcess = @('xenModules.Format.ps1xml')
# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
# NestedModules = @()
# Functions to export from this module
FunctionsToExport = '*'
# Cmdlets to export from this module
CmdletsToExport = '*'
# Variables to export from this module
VariablesToExport = '*'
# Aliases to export from this module
AliasesToExport = '*'
# List of all modules packaged with this module
# ModuleList = @()
# List of all files packaged with this module
# FileList = @()
# Private data to pass to the module specified in RootModule/ModuleToProcess
# PrivateData = ''
# HelpInfo URI of this module
# HelpInfoURI = ''
# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
# DefaultCommandPrefix = ''
}
xenModules.Format.ps1xml
<?xmlHashTable XenModule.LoadDetails 8 13 8 8 Right 3 10 LoadEvaluator LoginStatus Load Sessions MaxSessions ServerName

No comments:
Post a Comment