任务调度程序运行 power shell 脚本 - 用户名错误?

问题描述 投票:0回答:1

我有一个powershell脚本,当用户登录电脑时,它会把登录的详细信息通过电子邮件发给我,比如用户名、IP、位置等。它从任务调度器中运行,并在登录时有一个触发器。

我的问题是,无论谁登录,它总是在我的账户上运行脚本,因此总是输入我的名字作为用户名,即使不同的用户可能会登录。我试过用多种方式调用用户名,但总是显示我的名字,因为它是在我的账户上运行的。

为了调用用户名,我使用了:

$username = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

$env:UserName

$env:UserDomain

所有的都返回正在运行计划任务的用户。

如果能帮助它打印出真正的登录用户,将非常感激。

谢谢。

powershell task scheduler
1个回答
0
投票

可能是因为你的调度任务是用你的凭证执行的。很遗憾,没有办法解决这个问题。也就是说,你可以通过获取与explorer.exe进程相关联的用户账户来规避这种行为。

$username = Get-WmiObject Win32_Process -Filter "Name='explorer.exe'" | ForEach-Object { $_.GetOwner() } | Select-Object -Unique -Expand User

只要你不遇到多个用户同时登录一台机器的情况(快速用户切换,终端服务等),这应该是可行的。

EDIT: 为了得到你想要的东西,你可能需要更多类似这样的东西

$op = @()
$owners = Get-WmiObject Win32_Process -Filter "Name='explorer.exe'" | ForEach-Object { $_.GetOwner() } | Select-Object -Unique -Expand User
foreach($owner in $owners)
{
    $wmiprocs = get-wmiobject win32_process -filter "Name='explorer.exe'" | where { $_.getowner().user -eq $owner } | select-object processid
    $procs = $wmiprocs | % { get-process -id $_.processid | select-object starttime }
    $obj = new-object object
    $obj | add-member -type noteproperty -name Username $owner
    $obj | add-member -type noteproperty -name Logon ($procs | sort -descending)[0].starttime
    $op += $obj
}

$op | ft -auto

请注意,你的PowerShell实例需要以管理员身份运行,才能查询其他用户的进程。

© www.soinside.com 2019 - 2024. All rights reserved.