Назад | Перейти на главную страницу

Как удаленно проверить удаленных авторизованных пользователей на компьютере, используя WMIC?

Я хотел бы знать, возможно ли получить текущие имена пользователей удаленно вошедших в систему пользователей на компьютере? Из windows cmd?

Тип: WMIC / NODE: ComputerName ComputerSystem Получить имя пользователя

Эта команда работает, но дает пользователям, выполнившим вход локально, имя компьютера. Не те, кто удаленно авторизован.

Спасибо за помощь!

Поскольку все остальные склоняются к этому, думаю, я тоже могу.

я иметь использовал то, что @TheCleaner предложил с qwinsta.exe для мониторинга активных пользователей на терминальных серверах, но выводит только текст.

Но недавно я обнаружил класс Win32_UserProfile, который является очень многообещающим, поскольку теперь я могу выводить объекты для использования в PS.

Вот что у меня есть на данный момент:

Get-WmiObject Win32_Profile -ComputerName $Name -Filter "Loaded='True'" | Foreach {$_.LocalPath}

** Примечание. Возможно, вам придется отфильтровать некоторые «загруженные» профили, отбросив все результаты, в которых значение $ _. LocalPath отсутствует в папке C: \ Users.

Я использую его для своей среды, немного измененный, чтобы просто фильтровать только те компьютеры, которые мне нужны. Он вышел где-то в прошлом году, я думаю ... мне достаточно хорошо работает на 2008 R2. Хотя не тестировал его в 2012 году. Я просто запланировал его запускать ежедневно.

http://gallery.technet.microsoft.com/scriptcenter/PowerShell-script-to-Find-d2ba4252

# Import the Active Directory module for the Get-ADComputer CmdLet 
Import-Module ActiveDirectory 

# Get today's date for the report 
$today = Get-Date 

# Setup email parameters 
$subject = "ACTIVE SERVER SESSIONS REPORT - " + $today 
$priority = "Normal" 
$smtpServer = "YourMailServer" 
$emailFrom = "email@yourdomain.com" 
$emailTo = "email@yourdomain.com" 

# Create a fresh variable to collect the results. You can use this to output as desired 
$SessionList = "ACTIVE SERVER SESSIONS REPORT - " + $today + "`n`n" 

# Query Active Directory for computers running a Server operating system 
$Servers = Get-ADComputer -Filter {OperatingSystem -like "*server*"} 

# Loop through the list to query each server for login sessions 
ForEach ($Server in $Servers) { 
    $ServerName = $Server.Name 

    # When running interactively, uncomment the Write-Host line below to show which server is being queried 
    # Write-Host "Querying $ServerName" 

    # Run the qwinsta.exe and parse the output 
    $queryResults = (qwinsta /server:$ServerName | foreach { (($_.trim() -replace "\s+",","))} | ConvertFrom-Csv)  

    # Pull the session information from each instance 
    ForEach ($queryResult in $queryResults) { 
        $RDPUser = $queryResult.USERNAME 
        $sessionType = $queryResult.SESSIONNAME 

        # We only want to display where a "person" is logged in. Otherwise unused sessions show up as USERNAME as a number 
        If (($RDPUser -match "[a-z]") -and ($RDPUser -ne $NULL)) {  
            # When running interactively, uncomment the Write-Host line below to show the output to screen 
            # Write-Host $ServerName logged in by $RDPUser on $sessionType 
            $SessionList = $SessionList + "`n`n" + $ServerName + " logged in by " + $RDPUser + " on " + $sessionType 
        } 
    } 
} 

# Send the report email 
Send-MailMessage -To $emailTo -Subject $subject -Body $SessionList -SmtpServer $smtpServer -From $emailFrom -Priority $priority 

# When running interactively, uncomment the Write-Host line below to see the full list on screen 
$SessionList 

Если это не нужно запускать из cmd ... Я использую замечательную небольшую утилиту NetScan, чтобы сделать это за меня.

Ссылка NetScan

Одно из простых решений - перечислить экземпляры EXPLORER.EXE, запущенные на удаленном хосте. Затем просто вытащите пользователя-владельца.

Пример команды PS:

Get-WmiObject -Class Win32_Process -Filter "Name='explorer.exe'" -ComputerName "REMOTECOMPUTER" | ForEach-Object{ "{0}\{1}" -f $_.GetOwner().Domain, $_.GetOwner().User }