0

AutoHotKeyを使用して、SysinternalsツールPSLoggedOnを使用する単純なGUIツールを構築しています。まず、使用する run psloggedon.exe -l -x \\computernameと出力がまったく得られません。

だから私は試してみrun %ComSpec% /C psloggedon.exe -l -x 1> %Temp%\psloggedon.txtました、そしてそれは私にログインした各ユーザーのドメイン\ユーザー名形式の出力を与えます。

最初の例のように、最初にコマンドプロンプトを開くのではなく、psloggedonを実行して出力を取得したいと思います。それはどういうわけか可能ですか?

いずれにせよ、出力を取得してファイルへの書き込みを避けたいのですが、代わりに出力ストリームからの出力を編集して「ドメイン」の部分を削除し、ユーザー名を返します。サードパーティのソフトウェアなしでこれを行うにはどうすればよいですか?

4

1 に答える 1

0

Serverfaultに関する別の質問に対するこの回答は、StdoutReadを読み取ることによってそれを行う方法を示しています。私もファイルの使用を避ける方法を検討していましたが、実際にはそれが最も簡単なオプションであると判断しました。

user60738からコピーされたコード

#include <Constants.au3>
Dim $line, $line2, $file, $icount, $reg, $reg2, $reg3
$file = FileOpen("pclist.txt", 0)
While 1
    $line = FileReadLine($file)
    If @error Then ExitLoop
    $reg3 = ""
    $reg2 = ""
    $reg = ""
    If Ping($line, 200) Then
        $reg = @ComSpec & ' /C "' & @ScriptDir & "\pstools\psloggedon.exe -l -x \\" & $line & '"'
        $reg = Run($reg, "", @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD)
        While 1
            $reg2 = StdoutRead($reg)
            If @error Then ExitLoop
            If $reg2 Then
                $reg3 &= $reg2
            EndIf
        WEnd
        If StringInStr($reg3, "Error") Then
            $reg = "Error"
        ElseIf StringInStr($reg3,"No one is logged") Then
                $reg = "No one is logged on locally."
        Else
                $reg = StringTrimLeft($reg3, StringInStr($reg3, Chr(13), "", 3))
                $reg = StringTrimLeft($reg, StringInStr($reg, "\"))
                $reg = StringTrimRight($reg, StringLen($reg) - StringInStr($reg, Chr(13)))
                $reg = StringStripWS($reg, 8)
        EndIf
        $icount += 1
        $line2 &= $icount & @TAB & $line & @TAB & $reg & @CRLF
    EndIf
    TrayTip("Psloggedon", $icount & " " & $line & " User: " & $reg, 10)
WEnd
FileClose($file)
ConsoleWrite($line2)
FileDelete("C:\output.txt")
FileWrite("C:\output.txt", $line2)
ShellExecute("C:\output.txt")
于 2014-11-21T09:03:47.737 に答える