2016-04-19 4 views
0

新しいバージョンのアプリケーションをサーバに導入するためのpowershellスクリプトを作成しています。私たちのアプリケーションを実行しているすべてのRDUserSessionオブジェクトのリストを取得する必要があります。powershellを使用して特定のリモートアプリケーションを使用しているユーザセッションのリストを取得する

-Collectionオプションを使用してGet-RDUserSessionコマンドを実行すると、リモートでログインしているがRemoteAppを実行していない管理者を含め、システム上のすべてのユーザーが返されます。

リモートアプリケーションを実行しているすべてのユーザーを解放して、更新を実行できるようにしたいと考えています。

今すぐRDUserSessionsのリストを取得し、Send-RDUserMessageを使用してすべてのメッセージを送信しますが、スクリプトを実行しようとしている管理者もメッセージを送信していることがわかります。

RDUserSessionで実行されているアプリケーションのリストを取得する方法はありますか?

+0

セッションには接続しません。 – bpeikes

答えて

0
#Load your applications in an array 
$arr = @("a.exe", "b.exe") 

#Get the RD User Sessions 
$rdsessions = Get-RDUserSession 

#Create a blank array to capture your users 
$usrarr = @() 

#Loop through the applications in the array 
foreach($app in $arr) 
{ 
    #Loop through each of the sessions. 
    foreach($rdsession in $rdsessions) 
    { 
     #Check the application 
     $proc = Get-WmiObject -Class win32_process -Filter "Name = $app" 

     #compare the rdsession with the applicaitons session. 
     if($rdsession.id -eq $proc.SessionId) 
     { 
      #Load the true to the hash 
      $obj = New-Object -TypeName psobject -Property @{User = $rdsession.UserName; Application = $app} 
      $usrarr += $obj 
     } 
    } 
} 

#Now you can take the data in the array and send a message. 
Foreach($usr in $usrarr) 
{ 
    #send an email or a net send message. 
    #code here.... 
} 
+0

Get-WmiObjectはプロセスのリストを返しませんか? – bpeikes

+0

それに関連付けられたセッションでは、待機します。あなたもそれをループする必要があります。 – Fidelis

+0

Get-WmiObjectの代わりにGet-Processを使用するのはなぜですか? – bpeikes

関連する問題