Blog de Augusto Simoes (MVP)

Sharepoint, OCS, Windows Server ...

Augusto Simoes

Consultant Infrastructure & Trainer

Ma mission est de concevoir les architectures de messageries unifiés et collaboratives afin d'accompagner nos clients vers ces nouvelles technologies.

  • Microsoft Certified Trainer
  • Microsoft Certified Systems Engineer
  • Microsoft Certified Technology Specialist :SharePoint, WSS, OCS 2007, Vista, Windows 2008
  • Microsoft Certified Database Administrator SQL 2000, 2005


MVP Logo


MyTag

Mon Profile Chez Microsoft



 

 

RecentComments

Comment RSS

[PowerShell] Récupération de la liste des processus utilisateurs via WMI sur un serveur TSE avec PowerShell

Le service TSE de Microsoft n’implémente pas de classe WMI propre à la gestion des processus des utilisateurs distants. Des classes WMI propres à la gestion de Terminal Server existent, mais la gestion des processus reste basique.

Pour rappel, voici les classes WMI existantes pour TSE chez Microsoft. Toutes ces classes sont accessibles dans l’espace de noms ‘CIMV2’:

Win32_TerminalService Win32_TSNetworkAdapterListSetting
Win32_Terminal Win32_TSPermissionsSetting
Win32_TSGeneralSetting

Win32_TSAccount

Win32_TSLogonSetting Win32_TSSessionSetting

Win32_TSEnvironmentSetting

Win32_TSRemoteControlSetting

Win32_TSClientSetting

Win32_TSNetworkAdapterSetting
Win32_TSNetworkAdapterListSetting Win32_TSPermissionsSetting

Win32_TSAccount

 

Vous pouvez retrouver plus de détails sur ces classes WMI sur le site Technet de MS.

La finalité du script ci-dessous est de pouvoir associer un utilisateur avec les processus qui s’exécute dans son contexte de sécurité. Pour cela WMI offre une classe permettant de récupérer la liste des processus système: WIN32_Process

WIN32_Process contient quelques méthodes permettant d’associer un processus à un utilisateur ou plus exactement au contexte d’exécution de celui-ci. La méthode utilisé pour cela se nomme GetOwner().

Le but est donc de récupérer les processus en cours d’exécution sur le serveur TSE et d’associer un nom d’utilisateur à celui-ci. Le tout insérer dans un classeur Excel afin de pouvoir utiliser les filtres sur les colonnes.

# Create Excel Workbook
$excel = New-Object -comobject Excel.Application
$excel.Visible = $True
$workbook = $excel.Workbooks.Add()
#Create Excel Sheet in Workbook
$sheet = $workbook.Worksheets.Item(1)
$sheet.Name = "Process List"
$sheet = $workbook.WorkSheets.Item("Process List")
# Define start position and others parameters
$x = 2
$lineStyle = "microsoft.office.interop.excel.XlLineStyle" -as [type]
$colorIndex = "microsoft.office.interop.excel.XlColorIndex" -as [type]
For($ba = 1 ; $ba -le 2 ; $ba++)
{
 $sheet.cells.item(1,$ba).font.bold = $true
 $sheet.cells.item(1,$ba).borders.LineStyle = $lineStyle::xlDashDot
 $sheet.cells.item(1,$ba).borders.ColorIndex = $colorIndex::xlColorIndexAutomatic 
}
$sheet.cells.item(1,1) = "Processus"
$sheet.cells.item(1,2) = "User"
# Use WMI Class WIN32_Process with PowerShell
$MyWMIClassGet = gwmi Win32_Process
foreach ($unProc in $MyWMIClassGet)
{
# If Domain Name of context User is Null - Is System account
if (!$UnProc.GetOwner().Domain)
{
$sheet.cells.item($x, 1) = $UnProc.Name
$x++
}
else
{
#Retrieve User Name for others Process
$sheet.cells.item($x, 1) = $UnProc.Name
$sheet.cells.item($x,2) = $UnProc.GetOwner().User
$x++
}
}
$range = $sheet.usedRange
$range.Interior.ColorIndex = 19
$range.Font.ColorIndex = 11
$range.EntireColumn.AutoFit() | out-null

Voila le résultat du fichier Excel généré:

ProcessTSE


Bookmark and Share

Add comment




biuquote
  • Comment
  • Preview
Loading

captcha

*