Powershell-如何检查特定计算机上的登录用户

问题描述 投票:0回答:1

我有一个代码可以检查本地计算机上记录的会话,如下所示

Get-WmiObject win32_networkloginprofile | ? {$_.lastlogon -ne $null} | % {[PSCustomObject]@{User=$_.caption; LastLogon=[Management.ManagementDateTimeConverter]::ToDateTime($_.lastlogon)}}

是否可以在特定计算机上检查已登录的会话,甚至状态为“已断开”的会话?

powershell remote-access
1个回答
0
投票

显然,您需要在目标计算机上拥有权限:

Function Get-LoggedOnUser {
    param(
        [CmdletBinding()] 
        [Parameter(ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)]
        [string[]]$ComputerName = 'localhost'
    )
    begin {
        $ErrorActionPreference = 'Stop'
    }
    process {
        foreach ($Computer in $ComputerName) {
            try {
                quser /server:$Computer 2>&1 | Select-Object -Skip 1 | ForEach-Object {
                    $CurrentLine = $_.Trim() -Replace '\s+',' ' -Split '\s'
                    # If session is disconnected different fields will be selected
                    if ($CurrentLine[2] -eq 'Disc') {
                        [pscustomobject]@{
                            UserName = $CurrentLine[0];
                            ComputerName = $Computer;
                            SessionName = $null;
                            Id = $CurrentLine[1];
                            State = $CurrentLine[2];
                            IdleTime = $CurrentLine[3];

                            LogonTime = $CurrentLine[4..($CurrentLine.GetUpperBound(0))] -join ' '
                        }
                        # LogonTime = $CurrentLine[4..6] -join ' ';
                    }
                    else {
                        [pscustomobject]@{
                            UserName = $CurrentLine[0];
                            ComputerName = $Computer;
                            SessionName =  $CurrentLine[1];
                            Id = $CurrentLine[2];
                            State = $CurrentLine[3];
                            IdleTime = $CurrentLine[4];
                            LogonTime = $CurrentLine[5..($CurrentLine.GetUpperBound(0))] -join ' '
                        }
                    }
                }
            }
            catch {
                New-Object -TypeName PSCustomObject -Property @{
                ComputerName = $Computer
                Error = $_.Exception.Message
                } | Select-Object -Property UserName,ComputerName,SessionName,Id,State,IdleTime,LogonTime,Error
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.