使用Psloggedon进行Powershell以查看最后一次登录远程主机的用户(来自主机列表)

Ton*_*ony 3 powershell parsing loops sysinternals

我无法使用powershell和pslog来从psloggedon工具中提取"上次登录用户"和"登录时间戳"的信息.基本上我要做的是从一个带有所有服务器名称列表的文本文件中读取,然后在它们上使用pslogged来获取信息.因此,如果我单独运行以下命令,它可以工作

psloogedon \\server1
Run Code Online (Sandbox Code Playgroud)

但是当我在powershell中执行此操作时,它不起作用

$content = [IO.File]::ReadAllText("C:\assets.txt")
Foreach($computer in $content)
{
Invoke-Expression "psloggedon -x -l \\$computer"
} Export-Csv -NoTypeInformation loggedon.csv
Run Code Online (Sandbox Code Playgroud)

在assets.txt中我们有以下内容:

server1
server2
server3
etc...
Run Code Online (Sandbox Code Playgroud)

我如何基于此构建1)使脚本工作使用psloggedon获取信息2)将登录用户,计算机名称和时间戳解析为具有3列文件的CSV?

任何帮助表示赞赏....

Ant*_*ger 6

这对我有用

get-content 'C:\assets.txt' | % {
    $computer = $_
    . 'c:\pstools\PsLoggedon.exe' -accepteula -x -l \\$Computer 2>$null |
        ? {$_ -match '^\s{2,}((?<domain>\w+)\\(?<user>\S+))|(?<user>\S+)'} |
        Select-Object `
            @{n='Computer';e={$Computer}},
            @{n='Domain';e={$matches.Domain}},
            @{n='User';e={$Matches.User}} |
        ? user -notmatch '^Connecting$|^Users$|^NT$'
} | epcsv 'c:\loggedon.csv' -not
Run Code Online (Sandbox Code Playgroud)

另一个例子

gc 'C:\assets.txt' | % {
    $computer = $_
    . 'c:\pstools\PsLoggedon.exe' -accepteula -l \\$Computer 2>$null |
        ? {$_ -match '^\s{2,}(?<time>.*)\s{2,}(?<user>.*)'} | % {
            New-Object psobject -prop @{
                Computer = $computer
                Time = $Matches.time.Trim()
                User = $Matches.user.Trim()
            }
        } | ? user -notmatch '^Connecting$|^Users$|^NT$'
} | epcsv 'c:\loggedon.csv' -not
Run Code Online (Sandbox Code Playgroud)

如果你使用的是csv,你只需要替换前两行

import-csv 'C:\assets.csv' | % {
    $computer = $_.computers
Run Code Online (Sandbox Code Playgroud)

或这个

import-csv 'C:\assets.csv' | select -exp computers -u | % {
    $computer = $_
Run Code Online (Sandbox Code Playgroud)