Dette er også en mulighed:
up.
Function Get-WMILoggedOnUser {
<#
.SYNOPSIS
Function to get all logged on sessions (numbers) and coresponding users (domain name) on a local or remote system with WMI
.DESCRIPTION
Function to get all logged on sessions (numbers) and coresponding users (domain name) on a local or remote system with WMI
Gets the Win32_LogonSession and the associated Win32_LoggedOnUser information from WMI.
Matches the user to the session by sessionid
Creates a link between the LogType number to LogonTypeName name for the session logon type
Returns an PSCustomObject:
User properties: Domain,Name and SID
UserSession properties: StartTime,LogonID,LogonType,LogonTypeName and the ComputerName
.PARAMETER ComputerName
Specifies the computer against which you want to run the management operation.
The value can be a fully qualified domain name, a NetBIOS name, or an IP address.
Use the local computer name, use localhost, or use a dot (.) to specify the local computer.
The local computer is the default. When the remote computer is in a different domain from the user,
you must use a fully qualified domain name. This parameter can also be piped to the cmdlet.
.PARAMETER Logontype
Parameter to select the returned logontype(s)
See MSDN documentation for the WMI Win32_LogonSession class Property Logontype
Win32_LogonSession.Logontype is Numeric value that indicates the type of logon session.
0 Used only by the System account.
2 Interactive
Intended for users who are interactively using the machine, such as a user
being logged on by a terminal server, remote shell, or similar process.
3 Network
Intended for high-performance servers to authenticate clear text passwords.
LogonUser does not cache credentials for this logon type.
4 Batch
Intended for batch servers, where processes can be executed on behalf of a user
without their direct intervention; or for higher performance servers that process many
clear-text authentication attempts at a time, such as mail or web servers. LogonUser
does not cache credentials for this logon type.
5 Service
Indicates a service-type logon. The account provided must have the service privilege enabled.
6 Proxy
Indicates a proxy-type logon.
7 Unlock
This logon type is intended for GINA DLLs logging on users who are interactively
using the machine. This logon type allows a unique audit record to be generated
that shows when the workstation was unlocked.
8 NetworkCleartext
Windows Server 2003 and Windows XP: Preserves the name and password in the authentication packages,
allowing the server to make connections to other network servers while impersonating the client.
This allows a server to accept clear text credentials from a client, call LogonUser, verify that
the user can access the system across the network, and still communicate with other servers.
9 NewCredentials
Windows Server 2003 and Windows XP: Allows the caller to clone its current
token and specify new credentials for outbound connections. The new logon session
has the same local identify, but uses different credentials for other network connections.
10 RemoteInteractive
Terminal Services session that is both remote and interactive.
11 CachedInteractive
Attempt cached credentials without accessing the network.
12 CachedRemoteInteractive
Same as RemoteInteractive. This is used for internal auditing.
13 CachedUnlock
Workstation logon.
.PARAMETER Credential
Allows alternate Credentials to be used in query
.EXAMPLE
Get-WMILoggedOnUser
Returns all types of logged on User sessions on the local machine (computer)
.EXAMPLE
Get-WMILoggedOnUser -Computername 'localhost' -LogonType 'All'
Same as example 1: Returns all types of logged on User sessions on the local machine (computer)
.EXAMPLE
Get-WMILoggedOnUser -Computername 'Server1','Server2' -LogonType 'Interactive'
Returns only logged on Users with logon type of 'Interactive' (number 2)
.NOTES
Author: Peter Kriegel
Version 1.1.0 -- Boe Prox
-Added pipeline support for computername
-Expanded error handling
-Allow alternate credentials
Version 1.0.1 -- GiZmO 33
-Added Error handling
Version 1.0.0
- Initial Creation
12.July.2013
Link:
http://poshcode.org/4306 #>
[Cmdletbinding()]
param (
[Parameter(Position=0,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
[Alias('__Server','DNSHostname','IPAddress','Name')]
[String[]]$Computername = $ENV:COMPUTERNAME,
[Parameter(Position=1)]
[ValidateSet('0','LocalSystem','2','Interactive','3','Network','4','Batch','5',
'Service','6','Proxy','7','Unlock','8','NetworkCleartext','9','NewCredentials',
'10','RemoteInteractive','11','CachedInteractive','12','CachedRemoteInteractive',
'13','CachedUnlock','All')]
[String[]]$LogonType = @('0','2','3','4','5','6','7','8','9','10','11','12','13'), # All
[parameter()]
[Alias('RunAs')]
[System.Management.Automation.Credential()]$Credential = [System.Management.Automation.PSCredential]::Empty
)
Begin{
#wmiparams
$wmiParam = @{
ErrorAction = 'Stop'
}
If ($PSBoundParameters['Credential']) {
$wmiParam.Credential = $Credential
}
# define LogOnType hashtable for to convert Numbers into Text
$HashLogonType = @{
'0'='LocalSystem'
'2'='Interactive'
'3'='Network'
'4'='Batch'
'5'='Service'
'6'='Proxy'
'7'='Unlock'
'8'='NetworkCleartext'
'9'='NewCredentials'
'10'='RemoteInteractive'
'11'='CachedInteractive'
'12'='CachedRemoteInteractive'
'13'='CachedUnlock'
}
} # end Begin block
Process {
Try {
ForEach($CurComputerName in $ComputerName) {
$wmiParam.Computername = $CurComputerName
$wmiParam.Class = 'Win32_LogonSession'
$LogonSessions = Get-WmiObject @wmiParam
$wmiParam.Remove('Class')
ForEach($LogonSession in $LogonSessions) {
Try {
$wmiParam.Query = "Associators of {Win32_LogonSession.LogonId=$($LogonSession.LogonId)} Where AssocClass=Win32_LoggedOnUser Role=Dependent"
$LoggedOnUser = Get-WmiObject @wmiParam |
Select-Object Domain,Name,SID,StartTime,LogonID,LogonType,LogonTypeName,ComputerName
If ($LoggedOnUser.Name) {
$LoggedOnUser.StartTime = [Management.ManagementDateTimeConverter]::ToDateTime($LogonSession.starttime)
$LoggedOnUser.LogonID = $LogonSession.LogonID
$LoggedOnUser.LogonType = $LogonSession.logontype
$LoggedOnUser.LogonTypeName = $HashLogonType[[String]$LogonSession.logontype]
$LoggedOnUser.ComputerName = $CurComputerName
# Filter selected LogonTypes to report
If($LogonType -contains [String]$LoggedOnUser.LogonType -or $LogonType -contains $LoggedOnUser.LogonTypeName) {
# return result object
$LoggedOnUser
}
} Else {
Write-Warning ("{0}: Cannot find associated Logon Session!" -f $LogonSession.logonId)
}
} Catch {
Write-Warning ("{0}: {1}" -f $Logonsession.logonid,$_.exception.message)
}
} # end ForEach $LogonSession
$wmiParam.Remove('Query')
} # end ForEach $Computer
} catch [exception] {
Write-Warning ("{0}" -f $_.exception.message)
}
} # end process block
End {}
}