Couldn't you just do: $RA_User = $RunningApp.GetOwner().User
instead of doing another query? On Mon, Jul 6, 2015 at 11:53 AM, Michael Leone <[email protected]> wrote: > This is mostly for me to learn some PS techniques. What I am doing: > > I have a list of RemoteApps that is published on my RDS servers. From > a workstation running Win2012 R2, I am trying to remotely query each > of my 3 session hosts, and look at a list of users running each > RemoteApp. (I get the list of RemoteApps like this: > > -------------- > $OneSlash = "\" > $TwoSlash = "\\" > > $PublishedRA = (Get-RDRemoteApp -ConnectionBroker $ConnectionBroker | > Select -Property DisplayName,FilePath) | Sort -Property DisplayName > > ForEach ($RemoteApp in $PublishedRA) > { > $RA = New-Object PSObject > $RA | Add-Member -MemberType NoteProperty -Name DisplayName -Value > $RemoteApp.DisplayName > $RA | Add-Member -MemberType NoteProperty -Name FilePath -Value > $RemoteApp.FilePath.Replace($OneSlash, $TwoSlash) > $RA | Add-Member -MemberType NoteProperty -Name TheExecutable -Value > (Split-Path $RemoteApp.FilePath -Leaf) -Force > $PublishedRemoteApps += $RA > } > > > That executes quickly enough. So I have a list of the RemoteApps and > their executable path. Then I proceed to query the session hosts .I am > doing a Get-WmiObject call, querying the processes on each session > host for a process which has an executable that matches my RemoteApp. > > > $RunningApps = Get-WmiObject -Class Win32_Process -ComputerName > $SessionHost -Filter "ExecutablePath='$RA_FilePath'" > > This gives me all the processes on the remote server $SessionHost, > that have an executable path the same as my published RemoteApp. (say > there are 18 processes, meaning 18 users using this particular > RemoteApp on this session host) > > (here comes the big part of my problem) > Then, I am querying each of those returned objects for the owner's > username, and constructing a list of those: > > ForEach ($RunningApp in $RunningApps) > { > $RA_User = "" > $User_PID = $RunningApp.ProcessID > $RA_User = (Get-WmiObject -Class Win32_Process -ComputerName > $SessionHost -Filter "ProcessID='$User_PID'").GetOwner().User > $RunningAppUser += $RA_User > } > > Molasses in January would be faster than that, especially looping > through 3 session hosts :-) But how else can I get the owner's > username, of the process on the remote server? Usually, there are > approx 60 users, spread across the 3 session hosts. > > Thanks for any pointers. I usually don't do WMI calls, so this is a > way to learn ... > > > ================================================ > Did you know you can also post and find answers on PowerShell in the > forums? > http://www.myitforum.com/forums/default.asp?catApp=1 > > ================================================ Did you know you can also post and find answers on PowerShell in the forums? http://www.myitforum.com/forums/default.asp?catApp=1
