alcaron

CTX-Citrix-Report.ps1

Apr 23rd, 2013
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #========================================================================
  2. # Created with: SAPIEN Technologies, Inc., PowerShell Studio 2012 v3.1.13
  3. # Created on:   4/22/2013 1:10 PM
  4. # Created by:   Paul Fulbright
  5. # Organization: Maritz, LLC
  6. # Filename:     CTX-CitrixReport.ps1
  7. #========================================================================
  8.  
  9. Import-Module ActiveDirectory
  10.  
  11. function SQL-Connect($server, $port, $db, $userName, $passWord, $query) {
  12.     $conn = New-Object System.Data.SqlClient.SqlConnection
  13.     $ctimeout = 30
  14.     $qtimeout = 120
  15.     $constring = "Server={0},{5};Database={1};Integrated Security=False;User ID={2};Password={3};Connect Timeout={4}" -f $server,$db,$userName,$passWord,$ctimeout,$port
  16.     $conn.ConnectionString = $constring
  17.     $conn.Open()
  18.     $cmd = New-Object System.Data.SqlClient.SqlCommand($query, $conn)
  19.     $cmd.CommandTimeout = $qtimeout
  20.     $ds = New-Object System.Data.DataSet
  21.     $da = New-Object System.Data.SqlClient.SqlDataAdapter($cmd)
  22.     $da.fill($ds)
  23.     $conn.Close()
  24.     return $ds
  25. }
  26.  
  27. $port = "40013"
  28. $server = "10.65.1.45\fensqlmgtsp216m"
  29. $db = "CitrixRMSummary"
  30. $user = "CitrixRMReadOnly"
  31. $password = "3N11GQcr"
  32. $query = "SELECT * FROM CitrixRMIM.LU_USER"
  33. $userlist = SQL-Connect $server $port $db $user $password $query
  34.  
  35. # Create Array (empty) for department data
  36. $arDept = @{}
  37. foreach($i in $userlist.Tables[0].Rows) {
  38.     $pass = $false
  39.     # Pull sessions for users.
  40.     $uName = $i.USERNAME
  41.     $query2 = "SELECT * FROM CitrixRMIM.SDB_SESSION WHERE (CitrixRMIM.SDB_SESSION.FK_USERID = {0}) AND (CitrixRMIM.SDB_SESSION.SESSIONSTART > '01/03/2013')" -f $i.PK_USERID
  42.     $result = SQL-Connect $server $port $db $user $password $query2
  43.     $duration = 0
  44.     foreach($i in $result.Tables[0].Rows){
  45.         [int64]$dur = $i.DURATION.ToString()
  46.         $duration = ($duration + ($dur / 60000))
  47.     }
  48.    
  49.     try { $userInfo = Get-ADUser -Identity $uName -Properties DepartmentNumber, Department, Company }
  50.     catch { $pass = $true }
  51.    
  52.     # Verify account appeared valid.
  53.     if($pass -ne $true) {
  54.         # Check the user appears normal (a_ and h_ accounts likely wont have department numbers).
  55.         if($userInfo.DepartmentNumber[0].Length -gt 1 -and $userInfo.SamAccountName.Length -gt 1 -and $userInfo.Company.Length -gt 1) {
  56.             # Check whether or not the department element exists, if not, create it.
  57.             #if($userInfo.Department -eq "ARG-DATA Capture"){ $userInfo.SamAccountName }ny] = @{};$arDept[$userInfo.Company]["comName"] = $userInfo.Company}
  58.             if($arDept[$userInfo.Company].Contains($userInfo.DepartmentNumber[0]) -eq $false) { $arDept[$userInfo.Company][$userInfo.DepartmentNumber[0]] = @{};$arDept[$userInfo.Company][$userInfo.DepartmentNumber[0]]["depName"] = $userInfo.Department }
  59.             # Add user element to array with their total session duration.
  60.             $arDept[$userInfo.Company][$userInfo.DepartmentNumber[0]][$userInfo.SamAccountName] = "{0:N0}" -f ($duration/60)
  61.             # Update department duration total (pull user total from .Count()).
  62.             $arDept[$userInfo.Company][$userInfo.DepartmentNumber[0]]["duration"] = $arDept[$userInfo.Company][$userInfo.DepartmentNumber[0]]["duration"] + ($duration/60)
  63.         }else{
  64. #           Write-Host "FAILURE!"
  65. #           Write-Host $userInfo.DepartmentNumber[0]
  66. #           Write-Host $userInfo.SamAccountName
  67.         }
  68.     }
  69. }
  70.  
  71. $excel = New-Object -ComObject excel.application
  72. $excel.Visible = $true
  73. $excel.DisplayAlerts = $false
  74. $workbook = $excel.Workbooks.Add()
  75.  
  76. $row = 1
  77. $col = 1
  78. $sheet = $workbook.Worksheets.Item(1)
  79. $row = 162
  80. $cvar = 1
  81. $cvar3 = 1
  82. $top = 10
  83. $left = 10
  84. foreach($z in $arDept.Keys) {
  85.     "`r`nCVAR: "+$cvar
  86.     if($cvar -eq 1) {
  87.         $left = 10
  88.     }elseif($cvar -eq 2){
  89.         $left = 420
  90.     }elseif($cvar -eq 3) {
  91.         $left = 830
  92.     }
  93.    
  94.     $col = 2
  95.     $sheet.Cells.Item($row,1) = $arDept[$z].comName
  96.     $min = ($sheet.Cells.Item(($row)-1,1).Address()).Replace("$", "")
  97.     foreach($i in $arDept[$z].Keys) {
  98.         if($arDept[$z][$i].duration -ne 0) {
  99.             if($arDept[$z][$i].depName.Length -gt 1) {
  100.                 $row--
  101.                 $sheet.Cells.Item($row,$col) = $arDept[$z][$i].depName
  102.                 $arDept[$z][$i].depName
  103.                 $arDept[$z][$i].duration
  104.                 $row++
  105.                 $sheet.Cells.Item($row,$col) = $arDept[$z][$i].duration
  106.                 $col++
  107.             }
  108.         }
  109.     }
  110.     $max = ($sheet.Cells.Item($row,($col)-1).Address()).Replace("$", "")
  111.     $range = $sheet.Range($min,$max)
  112.     $chart = $sheet.Shapes.AddChart().Chart
  113.     $chartNum = ("Chart {0}" -f $cvar3)
  114.     $sheet.Shapes.Item($chartNum).Placement = 3
  115.     $sheet.Shapes.Item($chartNum).Top = $top
  116.     $sheet.Shapes.Item($chartNum).Left = $left
  117.     $sheet.Shapes.Item($chartNum).Height = 325
  118.     $sheet.Shapes.Item($chartNum).Width = 400
  119.     $chart.ChartType = 69
  120.     $chart.SetSourceData($range)
  121.     $row++;$row++
  122.     if($cvar -eq 3) {
  123.         $top = ($top)+340
  124.     }
  125.     if($cvar -eq 1 -or $cvar -eq 2){ $cvar++ }elseif($cvar -eq 3){ $cvar = 1}
  126.     $cvar3++
  127. }
Advertisement
Add Comment
Please, Sign In to add comment