PVSTools.psm1 is a work in progress. Most of the functions are still being developed. Please use at your own risk.

Last Update 07/21/2011
Convert-MCLI
Get-PVSDevicePersonality
Get-PVSDevice
Add-PVSDevicePersonality
Remove-PVSDevicePersonality
New-PVSGuid

PVSTools.psm1

Function Convert-MCLI()
{
  param
  (
    [Parameter(Mandatory=$true)]
    $results,
    [Parameter(Mandatory=$false)]
    $TreatResultsAsValues=$false,
    [Parameter(Mandatory=$false)]
    $addName="",
    [Parameter(Mandatory=$false)]
    $addValue=""
  )
  if($TreatResultsAsValues)
  {
    $strArr = @()
    $str = ""
    foreach($line in $results)
    {
      if($line.StartsWith("Record #"))
      {
        if(-not ($str -eq ""))
        {
          $strArr += $str
        }
        $str = ""
      }
      elseif(-not $line.StartsWith("Executing:"))
      {
        if($line.Contains(":"))
        {
          $name = $line.SubString(0,$line.IndexOf(":")).Trim()
          $value = $line.SubString($line.IndexOf(":")+1,($line.Length)-($line.indexof(":"))-1).Trim()
          if($str.Length -gt 0)
          {
            $str += ",""$name=$value"""
          }
          else
          {
            $str = """$name=$value"""
          }
        }
      }
    }
    if(-not ($str -eq ""))
    {
      $strArr += $str
    }
    $obj = New-object PSObject
    if($addName.Length -gt 0)
    {
      $obj | Add-Member -MemberType NoteProperty -Name $addName -value $addValue
    }
    $obj | Add-Member -MemberType NoteProperty -Name devicePersonality -value $strArr
    $obj
  }
  else
  {
    $objs = @()
    foreach($line in $results)
    {
      if($line.StartsWith("Record #"))
      {
        if(-not ($obj -eq $null))
        {
          $objs += $obj
        }
        $obj = New-object PSObject
      }
      elseif(-not $line.StartsWith("Executing:"))
      {
        if($line.Contains(":"))
        {
          $name = $line.SubString(0,$line.IndexOf(":")).Trim()
          $value = ($line.SubString($line.IndexOf(":")+1,($line.Length)-($line.indexof(":"))-1)).Trim()
          $obj | Add-Member -MemberType NoteProperty -Name $name -Value $value
        }
      }
    }
    if(-not ($obj -eq $null))
    {
      $objs += $obj
    }
    $objs
    return
  }
}
Function Get-PVSDevicePersonality()
{
  param
  (
    [Parameter(Mandatory=$true,
               ValueFromPipelineByPropertyName=$true,
               ValueFromPipeLine=$true)]
    [string]$deviceName=""
  )
  BEGIN
  {
    #Uses Citrix MCLI Powershell snapin
    Add-PSSnapin mcli* -ErrorAction SilentlyContinue
  }
  PROCESS
  {
    foreach($device in $deviceName)
    {
      $cmd = "mcli-get -t devicepersonality -p ""deviceName=$device"""
      $results = Invoke-Expression -Command $cmd
      Convert-MCLI -results $results -TreatResultsAsValues $true -addName "deviceName" -addValue $device
    }
  }
}
Function Get-PVSDevice()
{
  param
  (
    [Parameter(Mandatory=$false,
               ValueFromPipelineByPropertyName=$true,
               ValueFromPipeLine=$true)]
    [string]$deviceName=""
  )
  BEGIN
  {
    #Uses Citrix MCLI Powershell snapin
    Add-PSSnapin mcli* -ErrorAction SilentlyContinue
  }
  PROCESS
  {
    foreach($device in $deviceName)
    {
      if($device.Length -gt 0)
      {
        $cmd = "mcli-get -t device -p ""deviceName=$device"""
      }
      else
      {
        $cmd = "mcli-get -t device"
      }
      $results = Invoke-Expression -Command $cmd
      Convert-MCLI -results $results
    }
  }
}
Function Add-PVSDevicePersonality()
{
  param
  (
    [Parameter(Mandatory=$true,
               ValueFromPipelineByPropertyName=$true,
               ValueFromPipeLine=$true)]
    [string]$deviceName="",
    [Parameter(Mandatory=$true)]
    [string]$Name,
    [Parameter(Mandatory=$true)]
    [string]$Value,
    [Parameter(Mandatory=$false)]
    [boolean]$Overwrite=$true
  )
  BEGIN
  {
    #Uses Citrix MCLI Powershell snapin
    Add-PSSnapin mcli* -ErrorAction SilentlyContinue
  }
  PROCESS
  {
    $Name = $Name.toLower()
    foreach($device in $deviceName)
    {
      $devicePersonality = (Get-PVSDevicePersonality -DeviceName $device).devicePersonality
      $newPersonality = ""
      foreach($nvpair in $devicePersonality)
      {
        if(-not $nvpair.tolower().startswith("""name=$Name"""))
        {
          if($newPersonality.Length -gt 0)
          {
            $newPersonality += ","
          }
          $newPersonality += $nvpair
        }
        elseif($nvpair.tolower().startswith("""name=$Name""") -and (-not $Overwrite))
        {
          Get-PVSDevicePersonality -DeviceName $device
          return
        }
      }
    }
    if($newPersonality.Length -gt 0)
    {
      $newPersonality += ","
    }
    $newPersonality += """name=$Name"",""value=$Value"""
    $cmd = "mcli-setlist -t devicepersonality -p ""deviceName=$device"" -r $newPersonality"
    $results = Invoke-Expression -Command $cmd
    Get-PVSDevicePersonality -DeviceName $device
  }
}
Function Remove-PVSDevicePersonality()
{
  param
  (
    [Parameter(Mandatory=$true,
               ValueFromPipelineByPropertyName=$true,
               ValueFromPipeLine=$true)]
    [string]$deviceName="",
    [Parameter(Mandatory=$true)]
    [string]$Name
  )
  BEGIN
  {
    #Uses Citrix MCLI Powershell snapin
    Add-PSSnapin mcli* -ErrorAction SilentlyContinue
  }
  PROCESS
  {
    $Name = $Name.toLower()
    foreach($device in $deviceName)
    {
      $devicePersonality = (Get-PVSDevicePersonality -DeviceName $device).devicePersonality
      $newPersonality = ""
      foreach($nvpair in $devicePersonality)
      {
        if(-not $nvpair.tolower().startswith("""name=$Name"""))
        {
          if($newPersonality.Length -gt 0)
          {
            $newPersonality += ","
          }
          $newPersonality += $nvpair
        }
      }
    }
    if($newPersonality.Length -gt 0)
    {
      $cmd = "mcli-setlist -t devicepersonality -p ""deviceName=$device"" -r $newPersonality"
      $results = Invoke-Expression -Command $cmd
    }
    else
    {
      $cmd = "mcli-setlist -t devicepersonality -p ""deviceName=$device"""
      $results = Invoke-Expression -Command $cmd
    }
    Get-PVSDevicePersonality -DeviceName $device
  }
}
Function New-PVSGuid()
{
  return ([guid]::NewGuid()).ToString().Replace("-","").ToUpper()
}