3

Powershellでこれを行うための非常に簡単な方法が必要です(Absolute Manageを使用してPowershellスクリプトをリモートで実行しています):

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

検索中に見つけたもののほとんどは、ユーザーのログイン/ログアウトに関連するはるかに複雑なことを行うことに関連しています。基本的に、コンピューターが現在ログインプロンプトに座っているかどうかを知る必要があるだけです。

あらゆる支援に感謝します-皆さんは素晴らしいです.

4

4 に答える 4

0

環境によっては、ここで説明するように、これは地雷原になる可能性があります。

ScriptingGuyの記事

要約すると、 SysInternals Suiteから入手できるPSLoggedOnツールを使用し、返される可能性のあるサービスアカウントを除外するように注意してください。リンク切れを防ぐために、上記のScriptingGuyの記事の使用例を次に示します。

$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' 
    } 
 }
于 2012-07-19T12:28:21.723 に答える
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]
    }

特定のドメインの人だけを探したい場合は、次のように少し変更できます。

Get-WmiObject Win32_LoggedOnUser -ComputerName "myMachine" | 
    Select Antecedent -Unique | 
    % { 
        $domain = $_.Antecedent.Split('"')[1]
        if($domain -eq "myDomain") {
            "{0}\{1}" -f $domain, $_.Antecedent.Split('"')[3]
        }
    }
于 2012-07-19T12:41:26.913 に答える
0

可能であれば WMI を使用します。

$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
于 2012-07-19T12:48:38.660 に答える