On Mon, Jul 6, 2015 at 1:44 PM, Ryan <[email protected]> wrote:
> Couldn't you just do:
>
> $RA_User = $RunningApp.GetOwner().User
>
> instead of doing another query?


D'OH! Yes, I can. Dunno why I was blanking on the fact that all the
returned objects from the first WMI call ... ALSO have the methods
with them ...

Now I feel stupid ...

Yeah, the script execution time went from 5 min+ to like 15 seconds ...

Thanks. Sorry for the waste of bandwidth ...
>
> 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


================================================
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