2012-07-19 2 views
3

나는 내가 희망하는 PowerShell에서이 작업을 수행 할 수있는 매우 간단한 방법 (I 원격으로 절대 관리를 사용하여 PowerShell 스크립트를 실행하는거야)입니다 필요가 로그 아웃하는 경우 확인 :파워 쉘 : 컴퓨터가

if (computer is logged out) 
{ 
    <run script> 
} 
else 
{ 
    exit 
} 

무엇의 대부분을 I 검색하는 동안 사용자 로그인/로그 아웃과 관련된 훨씬 복잡한 작업을 수행하는 것으로 나타났습니다. 나는 기본적으로 컴퓨터가 현재 로그인 프롬프트에 있는지 아닌지를 알아야합니다.

모든 도움을 주셔서 감사합니다. 여기에서 논의 된 바와 같이

답변

0

사용자 환경에 따라이 지뢰밭이 될 수 있습니다

Scripting Guy Article 요약

, 반환 할 수있는 서비스 계정을 필터링 조심하는 동안 SysInternals Suite에서 사용할 수있는 PSLoggedOn 도구를 사용하여 . 링크 부패 방지하려면 여기 스크립팅 가이 문서를 위의 사용 예입니다 :

$Computers = @( 
, "PC001" 
, "PC002" 
, "PC003" 
, "PC004" 
) 

Foreach ($Computer in $Computers) 
{ 
    [object[]]$sessions = Invoke-Expression ".\PsLoggedon.exe -x -l \\$Computer" | 
     Where-Object {$_ -match '^\s{2,}((?<domain>\w+)\\(?<user>\S+))|(?<user>\S+)'} | 
     Select-Object @{ 
      Name='Computer' 
      Expression={$Computer} 
     }, 
     @{ 
      Name='Domain' 
      Expression={$matches.Domain} 
     }, 
     @{ 
      Name='User' 
      Expression={$Matches.User} 
     } 
    IF ($Sessions.count -ge 1) 
    { 
     Write-Host ("{0} Users Logged into {1}" –f $Sessions.count,  
      $Computer) -ForegroundColor 'Red' 
    } 
    Else 
    { 
     Write-Host ("{0} can be rebooted!" -f $Computer) ` 
      -ForegroundColor 'Green' 
    } 
} 
0

바와 같이 here 설명, 모든 사용자 로그온을 얻기 위해 아래의 조각을 사용할 수 있습니다. 여기에는 SYSTEM, LOCAL SERVICE 및 NETWORK SERVICE와 같은 사용자가 포함됩니다. 당신이 특정 도메인에있는 사람들을 찾고 싶을 경우

Get-WmiObject Win32_LoggedOnUser -ComputerName "myMachine" | 
    Select Antecedent -Unique | 
    % { 
     "{0}\{1}" -f $_.Antecedent.Split('"')[1], $_.Antecedent.Split('"')[3] 
    } 

, 당신은 다음과 같이 약간 수정할 수 있습니다 : 가능하면 WMI를 사용

Get-WmiObject Win32_LoggedOnUser -ComputerName "myMachine" | 
    Select Antecedent -Unique | 
    % { 
     $domain = $_.Antecedent.Split('"')[1] 
     if($domain -eq "myDomain") { 
      "{0}\{1}" -f $domain, $_.Antecedent.Split('"')[3] 
     } 
    } 
0

가 :

$info = gwmi -class win32_computerSystem -computer sist002ws -ea silentlycontinue | Select-Object username 

if ($info.username.Length -gt 0) 

{$Message = $info.username} 
else 
{ $Message = "No user is logged in locally"} 

$message 
0

이 당신을 얻을 것이다 모든 대화 형/RemoteInteractive (터미널 서비스 세션) 사용자가 로그온했습니다. LogonType을 필터에 추가 할 수 있습니다. 어떤 결과는 아무도에 기록되어 의미합니다.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa394189(v=vs.85).aspx

Get-WmiObject Win32_LogonSession -ComputerName Server1 -Filter 'LogonType=2 OR LogonType=10' | 
Foreach-Object { $_.GetRelated('Win32_UserAccount') } | 
Select-Object Caption -Unique