Highlighted
Enthusiast
Enthusiast

Get-hvlocalsession for multiple users

Jump to solution

Hi guys,

I am trying to make a script which should give session details of multiple users such as username,login time and logout time.

I could get the required details for all the users by below script. But dont know how to get it for multiple users. ie by importing limited no of usernames in a text file.

Get-hvlocalsession | ForEach-Object -Process {

$dtformat = "dd-mm-yy HH:mm"

$ls = $_

'' | select @{N="Emp Id";E={$ls.NamesData.UserName.Replace("Domainname\","")}},

  @{N="Login Time";E={$ls.sessiondata.StartTime.ToString($dtformat)}},

  @{N="Logoff Time";E={$ls.sessiondata.DisconnectTime.ToString($dtformat)}}

}

Any help?

1 Solution

Accepted Solutions
Highlighted
User Moderator
User Moderator

Since Get-GVLocalSession doesn't take any parameters, I can only think of adding a Where-clause.

$users = 'user1','user2','user3'

$dtformat = "dd-mm-yy HH:mm"


Get-HVLocalSession |

Where{$users -contains $_.NamesData.UserName.Split('\')[1]} |

Select @{N="Emp Id";E={$_.NamesData.UserName.Split('\')[1]}},

     @{N="Login Time";E={$_.sessiondata.StartTime.ToString($dtformat)}},

     @{N="Logoff Time";E={$_.sessiondata.DisconnectTime.ToString($dtformat)}}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

View solution in original post

30 Replies
Highlighted
User Moderator
User Moderator

Since Get-GVLocalSession doesn't take any parameters, I can only think of adding a Where-clause.

$users = 'user1','user2','user3'

$dtformat = "dd-mm-yy HH:mm"


Get-HVLocalSession |

Where{$users -contains $_.NamesData.UserName.Split('\')[1]} |

Select @{N="Emp Id";E={$_.NamesData.UserName.Split('\')[1]}},

     @{N="Login Time";E={$_.sessiondata.StartTime.ToString($dtformat)}},

     @{N="Logoff Time";E={$_.sessiondata.DisconnectTime.ToString($dtformat)}}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

View solution in original post

Highlighted
Enthusiast
Enthusiast

Its working Lucd :smileyblush:

We are using SQL server. Is it possible to retrieve these same historic data through powercli?

For example session details (starttime,disconnecttime) of yesterday

0 Kudos
Highlighted
User Moderator
User Moderator

Isn't that possible via Get-HVEvent and then filtering on the required types of events?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
Highlighted
Enthusiast
Enthusiast

Hi Lucd,

As per your instruction. I tried below script

For Login Time:

$users = Get-Content -path D:\hlist.txt

$events=Get-HVEvent -HvDbServer $eventdb -TimePeriod week -MessageFilter "logged in to a new session"

$events.events | where{$users -contains $_.UserName} |

select @{N="Emp Id";E={$_.UserName.Split('\')[1]}},

@{N="Login Time";E={$_.eventtime}}

For Logoff time:

$users = Get-Content -path D:\hlist.txt

$events=Get-HVEvent -HvDbServer $eventdb -TimePeriod week -MessageFilter "logged off machine"

$events.events | where{$users -contains $_.UserName} |

select @{N="Emp Id";E={$_.UserName.Split('\')[1]}},

@{N="Logoff Time";E={$_.eventtime}}

Its working but I need both login and logout time in a single script. How to do that?

0 Kudos
Highlighted
User Moderator
User Moderator

Do the events also include the stationId?
Then you could all the events (logon and logoff) and sort on stationId and time.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
Highlighted
Enthusiast
Enthusiast

No lucd...I couldnt find any id in the events.:smileyconfused:

0 Kudos
Highlighted
User Moderator
User Moderator

Then you could still collect all events (logon & logoff) and sort them on time.

Consecutive entries should then (in theory) be the start and end of a session.
But this will obviously not work if a user connects from different stations and has parallel sessions.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
Highlighted
Enthusiast
Enthusiast

Hi Lucd,

In my environment users access from single station only.

Is it possible to merge the below two set of scripts as one script?

$users = Get-Content -path D:\hlist.txt

$events=Get-HVEvent -HvDbServer $eventdb -TimePeriod week -MessageFilter "logged in to a new session"

$events.events | where{$users -contains $_.UserName} |

select @{N="Emp Id";E={$_.UserName.Split('\')[1]}},

@{N="Login Time";E={$_.eventtime}}

$users = Get-Content -path D:\hlist.txt

$events=Get-HVEvent -HvDbServer $eventdb -TimePeriod week -MessageFilter "logged off machine"

$events.events | where{$users -contains $_.UserName} |

select @{N="Emp Id";E={$_.UserName.Split('\')[1]}},

@{N="Logoff Time";E={$_.eventtime}}

0 Kudos
Highlighted
User Moderator
User Moderator

Can you check if the following produces a list with alternating Logon/Logoff lines for the same user?

If it does, the script could find the first Logon and pair it with the following Logoff in 1 record.
And calculate the difference between the 2 timestamps for the session duration.

$users = Get-Content -path D:\hlist.txt

$events = @()


$events = Get-HVEvent -HvDbServer $eventdb -TimePeriod week -MessageFilter "logged in to a new session" |

    Add-Member -Name Type -Value 'logon' -MemberType NoteProperty -PassThru

$events += Get-HVEvent -HvDbServer $eventdb -TimePeriod week -MessageFilter "logged off machine" |

    Add-Member -Name Type -Value 'logoff' -MemberType NoteProperty -PassThru


$events.events | where{$users -contains $_.UserName} |

select Type,

    @{N="Emp Id";E={$_.UserName.Split('\')[1]}},

    @{N="Time";E={$_.eventtime}} |

Group-Object -Property 'Emp Id' |

ForEach-Object -Process {

    $_.Group | Sort-Object -Property Time

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
Highlighted
Enthusiast
Enthusiast

Hi Lucd,

Seems something is missing in the above script. Got this after running that script.

ss.PNG

0 Kudos
Highlighted
User Moderator
User Moderator

Yes, use NoteProperty.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
Highlighted
Enthusiast
Enthusiast

Its working lucd, but it gives time as a single output. How would I differentiate login and logout time separately?

0 Kudos
Highlighted
User Moderator
User Moderator

You should have the Type property that says if it concerns a Logon or a Logoff.
If in the sorted list, these lines (Logon-Logoff) follow each other, a script can combine those.

How does the result look after the sort?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
Highlighted
Enthusiast
Enthusiast

Hi lucd, this is how the result is for two users.

s.JPG

0 Kudos
Highlighted
User Moderator
User Moderator

The Type property seems to be empty.
I updated the code, you shouldn't be prompted anymore


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Highlighted
Enthusiast
Enthusiast

Yes lucd, its not prompting now. But the Type is still empty :smileyconfused:

0 Kudos
Highlighted
User Moderator
User Moderator

Then I'm at my wit's end, seems to work for me.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
Highlighted
Enthusiast
Enthusiast

:smileylaugh:  In my work, Am using lots of your scripts from that wit's end.

Ok lucd...how to convert datetime format in eventtime?

tostring() function is not working here.

0 Kudos
Highlighted
User Moderator
User Moderator

We could try to find out what is actually there in the objects that are returned.

Try running the following.

Note that this may produce quite a bit of output, perhaps better attach the result as a file instead of including it inline.

Get-HVEvent -HvDbServer $eventdb -TimePeriod week -MessageFilter "logged in to a new session" |

Select -First 1 | Format-Custom -Depth 2


Get-HVEvent -HvDbServer $eventdb -TimePeriod week -MessageFilter "logged off machine" |

Select -First 1 | Format-Custom -Depth 2


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos