在以 SYSTEM 身份从 RMM 软件运行的 PowerShell 中显示当前登录的用户

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

我花了几个小时搜索了这个场景,看到了很多关于这个场景的想法,但没有任何一个对我来说像它应该的那样有效(我测试了我在自己的机器上看到的每个代码,但没有任何东西让我得到我想要的结果。)

背景:我们正在 RMM 软件中使用脚本来重命名代理

$benutzer = [环境]::用户名
Set-ItemProperty -Path "HKLM:\Software\MMSOFT Design\PC Monitor" -Name ComputerName -Value "$env:USERDOMAIN - $env:Computername - $benutzer"

此脚本为我们提供了 $env:USERNAME 用户 SYSTEM,但我们实际上想要登录到该系统的真实用户名。

请帮帮我:)

powershell system
2个回答
0
投票

环境变量

[System.Environment]::GetEnvironmentVariable('username')
将为您提供脚本执行者的用户名,在您的情况下为
System
,因为这是运行代码的用户。

如果要为用户使用环境变量,则必须使脚本从用户或代表用户运行,这也意味着用户必须具有修改注册表的“权限”。

如果我理解正确,您需要知道谁是运行该脚本的计算机的“登录用户”,不幸的是,据我所知,PowerShell 中没有任何可用的方法可以做到这一点,您可以使用内置工具 query 对于 Windows 机器,它将为您提供一个列表,其中包含该机器的所有登录用户,您需要进一步测试它以从中获取您想要的内容,输出如下所示:

PS C:\Users\t-user> query user
 USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
>t-user                console             1  Active      none   8/29/2022 11:58 AM

query user
的技巧在于,如果多个用户登录,它会为您提供用户列表。

我明白你想做什么,这是一个“dirty”的例子:

$loggedUserList= query user

if($loggedUserList.count -eq 2){
    $user = $loggedUserList -split ">" -replace '\s\s+', ';' | convertfrom-csv -Delimiter ';' | select -ExpandProperty username
    Write-Host "Logged in user is - $user"
}else{
    Write-Host "More than one user have signed"
}

0
投票

我意识到这已经是一年前的事了,但这已经在这里得到了回答: 以系统身份运行时查找当前登录的用户(无环境变量)

该页面提供了两种从以系统用户身份运行的 powershell 脚本获取当前登录用户的方法。

显示用户而不是计算机/用户或域/用户。

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

显示计算机/用户或域/用户2次

$User = tasklist /v /FI "IMAGENAME eq explorer.exe" /FO list | find "User Name:"
$User = $User.Substring(14)
© www.soinside.com 2019 - 2024. All rights reserved.