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

Reply via email to