فهرست منبع

improve get-loggedinuser

Tobias Simetsreiter 2 سال پیش
والد
کامیت
4ed95f0661
1فایلهای تغییر یافته به همراه21 افزوده شده و 85 حذف شده
  1. 21 85
      bin/Get-LoggedinUser.ps1

+ 21 - 85
bin/Get-LoggedinUser.ps1

@@ -1,86 +1,22 @@
-<#
-        .SYNOPSIS
-            Shows all the users currently logged in to specified or remote computers
-    
-        .DESCRIPTION
-            Shows the users currently logged into the specified computername if not specified local computers will be shown.
-    
-        .PARAMETER ComputerName
-            One or more computernames
-    
-        .EXAMPLE
-            PS C:\> Get-LoggedInUser
-            Shows the users logged into the local system
-    
-        .EXAMPLE
-            PS C:\> Get-LoggedInUser -Computer server1,server2,server3
-            Shows the users logged into server1, server2, and server3
-    
-        .EXAMPLE
-            PS C:\> Get-LoggedInUser  | where{$_.sessionname -match 'RDP'}  ## shows where users are connected VIA RDP
-    
-        .Example
-    
-            PS C:\> Get-ADComputer -Filter *|select -exp name |Foreach{Get-LoggedInUser -Computer $_ } 
-            Shows all computers in active directory computers
-    
-        .Example
-    
-            PS C:\> get-content C:\listofcomputers.txt |Foreach{Get-LoggedInUser -Computer $_ } 
-            Shows all computers in the text file.
-    
-        .Example 
-           
-            PS C:\> Get-LoggedInUser -computer server1,server2  | where{$_.username -eq 'admin'}
-           Shows where a user islogged in to. 
-    
-        .MORE
-             [PSCustomObject]@{
-              ComputerName    = $Comp
-              Username        = $line.SubString(1, 20).Trim()
-              SessionName     = $line.SubString(23, 17).Trim()
-              #ID             = $line.SubString(42, 2).Trim()
-              State           = $line.SubString(46, 6).Trim()
-              #Idle           = $line.SubString(54, 9).Trim().Replace('+', '.')
-              #LogonTime      = [datetime]$line.SubString(65)
-    
-              Remove # Against each if you want to see the Output of the Value
-          
-    ************************************************************************
-     Notes: Run as administrator
-     Author: Jiten https://community.spiceworks.com/people/jitensh
-    Date Created: 08/30/2018
-         Credits: 
-    Last Revised: 08/30/2018
-    ************************************************************************
-    #>
-    
-[cmdletbinding()]
-param(
-    [String[]]$Computer = $env:COMPUTERNAME
-)
-    
-ForEach ($Comp in $Computer) { 
-    If (-not (Test-Connection -ComputerName $comp -Quiet -Count 1 -ea silentlycontinue)) {
-        Write-Warning "$comp is Offline"; continue 
-    } 
-    $stringOutput = quser /server:$Comp 2>$null
-    If (!$stringOutput) {
-        Write-Warning "Unable to retrieve quser info for `"$Comp`""
+
+$stringOutput = quser 2>$null
+If (!$stringOutput) {
+    Write-Warning "Unable to retrieve quser info for `"$Comp`""
+}
+$out = (($stringOutput -split "\n" -replace "SESSIONNAME", "")  -replace "rdp-tcp#[0-9]+", "") -replace '\s\s+', ';'| convertfrom-csv -Delimiter ';'
+
+$out | ForEach-Object {
+    If($_."IDLE TIME" -eq ".") {
+        $_."IDLE TIME" =[TimeSpan]::Parse("0")
+        return
     }
-    ForEach ($line in $stringOutput) {
-        If ($line -match "logon time") 
-        { Continue }
-    
-        [PSCustomObject]@{
-            ComputerName = $Comp
-            Username     = $line.SubString(1, 20).Trim()
-            SessionName  = $line.SubString(23, 17).Trim()
-            ID           = $line.SubString(42, 2).Trim()
-            State        = $line.SubString(46, 6).Trim()
-            #Idle           = $line.SubString(54, 9).Trim().Replace('+', '.')
-            #LogonTime      = [datetime]$line.SubString(65)
-        }
-              
-    } 
-} 
+    $_ | out-host
+    "0:"+$_."IDLE TIME" | out-host
+    If($_."IDLE TIME" -like "*:*") {
+        $_."IDLE TIME" = [TimeSpan]::Parse($_."IDLE TIME")
+    } else {
+        $_."IDLE TIME" = [TimeSpan]::Parse("0:"+$_."IDLE TIME")
+    }
+}
+
+$out