2016-06-23 4 views
0

현재 로그인 한 사용자 수 (로컬 &)를 확인하는 명령/스크립트를 찾고 있습니다. 지난 30 분 동안 컴퓨터 재부팅 여부를 결정할 수 있습니다. 잘하면 Get-ADUser가 없습니다. 얼마나 많은 활성 사용자 (로컬 및 도메인)가 현재 로그인되어 있는지 확인하는 명령/스크립트를 명령하는 Powershell 명령

나는 두 개의 스크립트에 걸쳐하지만 그들은 내가 로그인 한 5 개 이상의 사용자를 볼 수 있습니다 서버에서 단지 내 정보를 반환하는 실행에왔다.

을 script1이

function Get-LoggedOnUser { 
#Requires -Version 2.0    
[CmdletBinding()]    
Param    
    (      
    [Parameter(Mandatory=$true, 
       Position=0,       
       ValueFromPipeline=$true,    
       ValueFromPipelineByPropertyName=$true)]    
    [String[]]$ComputerName 
    )#End Param 

Begin    
{    
Write-Host "`n Checking Users . . . " 
$i = 0    
}#Begin   
Process    
{ 
    $ComputerName | Foreach-object { 
    $Computer = $_ 
    try 
     { 
      $processinfo = @(Get-WmiObject -class win32_process -ComputerName $Computer -EA "Stop") 
       if ($processinfo) 
       {  
        $processinfo | Foreach-Object {$_.GetOwner().User} | 
        Where-Object {$_ -ne "NETWORK SERVICE" -and $_ -ne "LOCAL SERVICE" -and $_ -ne "SYSTEM"} | 
        Sort-Object -Unique | 
        ForEach-Object { New-Object psobject -Property @{Computer=$Computer;LoggedOn=$_} } | 
        Select-Object Computer,LoggedOn 
       }#If 
     } 
    catch 
     { 
      "Cannot find any processes running on $computer" | Out-Host 
     } 
    }#Forech-object(ComputerName)  

}#Process 
End 
{ 

}#End 

}#Get-LoggedOnUser 

$regexa = '.+Domain="(.+)",Name="(.+)"$'; 
$regexd = '.+LogonId="(\d+)"$'; 
$logontype = @{"0"="Local System"; 
"2"="Interactive"; 
"3"="Network"; 
"4"="Batch"; 
"5"="Service"; 
"7"="Unlock"; 
"8"="NetworkCleartext"; 
"9"="NewCredentials"; 
"10"="RemoteInteractive"; 
"11"="CachedInteractive"; 
}; 
$logon_sessions = @(gwmi win32_logonsession); 
$logon_users = @(gwmi win32_loggedonuser); 
$session_user = @{}; 
$logon_users |% {$_.antecedent -match $regexa > $nul; 
$username = $matches[1] + "\" + $matches[2]; 
$_.dependent -match $regexd > $nul; 
$session = $matches[1]; 
$session_user[$session] += $username}; 
$logon_sessions |%{$starttime = [management.managementdatetimeconverter]::todatetime($_.starttime); 
$loggedonuser = New-Object -TypeName psobject; 
$loggedonuser | Add-Member -MemberType NoteProperty -Name "Session" -Value $_.logonid; 
$loggedonuser | Add-Member -MemberType NoteProperty -Name "User" -Value $session_user[$_.logonid]; 
$loggedonuser | Add-Member -MemberType NoteProperty -Name "Type" -Value $logontype[$_.logontype.tostring()]; 
$loggedonuser | Add-Member -MemberType NoteProperty -Name "Auth" -Value $_.authenticationpackage; 
$loggedonuser | Add-Member -MemberType NoteProperty -Name "StartTime" -Value $starttime; 
$loggedonuser} 
Script2

도움을 주시면 감사하겠습니다.

덕분에, Sambhav

+1

안녕하세요, PS가 관리자로 실행 중이십니까? – sodawillow

+0

좋은 점은, 방금이 점을 발견했는데, 그것은 실제로 문제였습니다. 고맙습니다. – Sambhav

답변

0

나는 관리자로 PowerShell을 를 실행하지 않는 경우 다른 사용자 세션에 대한 정보를 얻을 수 있다고 생각합니다.