PowerShell 获取当前用户

Migel Hewage Nimesha 2023年1月30日 2022年5月16日
  1. 在 PowerShell 中使用 Win32_ComputerSystem 类获取当前用户
  2. 在 PowerShell 中使用环境变量获取当前用户
  3. 在 PowerShell 中使用 whoami 命令获取当前用户
PowerShell 获取当前用户

使用 Windows 时,你几乎肯定需要知道哪些用户帐户在某个时间主动登录到计算机。值得庆幸的是,PowerShell 可以获取远程或本地计算机上的当前用户。

有许多方法可以在不使用 PowerShell 的情况下检索登录到计算机的当前用户。使用 PowerShell,你还可以通过将结果视为对象来更改结果。

例如,如果你执行询问用户凭据的脚本,PowerShell 可以动态生成用户名,而你只需要手动输入密码。

在 PowerShell 中使用 Win32_ComputerSystem 类获取当前用户

我们将使用 PowerShell cmdlet,即 Get-CimInstanceGet-WMIObject。这些允许我们通过在远程或本地计算机上使用 WMI(Windows Management Instrumentation)类来获取当前用户。在 PowerShell 中调用以下任何寻址 Win32 ComputerSystem 类的 cmdlet 以获取当前用户。

Username 属性是 Win32 ComputerSystem 类的属性之一。为此,请启动 PowerShell 并执行如下所示的命令。

获取 CimInstance:

(Get-CimInstance -ClassName Win32_ComputerSystem).Username

获取 WMIObject:

(Get-WMIObject -ClassName Win32_ComputerSystem).Username

输出:

DESKTOP-DelftStack\DefltStack

这里两个命令得到相同的结果。但需要注意的是,上述命令只在用户直接登录时才会给出结果。如果是远程登录,则用户名将为空。

在 PowerShell 中使用环境变量获取当前用户

使用 PowerShell 在计算机上获取当前用户的另一种技术是从环境变量中检索信息。操作系统数据,例如当前用户的用户名,由环境变量表示。但是,使用环境变量主要有三种方式;无论采用何种方法,它都会得到相同的结果。

三种方式如下。

  1. 环境 PowerShell 驱动器
  2. $env 变量
  3. .NET 环境类

下面进一步解释上述方法。

环境 PowerShell 驱动器

环境变量由 PowerShell 缓存并通过 Env: 驱动器提供,该驱动器是 PowerShell 驱动器 (PSDrive)。PSDrive 是可以像计算机上的驱动器一样访问的存储位置(例如 C:),但只能通过 PowerShell 访问。

Env: 驱动器会在你启动 PowerShell 会话时自动创建。因为 Env: 是一个驱动器,你可以使用 Get-ChildItem cmdlet 访问其内容,其工作方式类似于列出文件系统文件夹或驱动器的项目。

可以使用以下命令检索用户。

Get-ChildItem Env:\USERNAME

输出

Name                           Value
----                           -----
USERNAME                       DelftStack

为了仅获取值,可以使用以下命令。

(Get-ChildItem Env:\USERNAME).Value

输出:

DelftStack

可以看出该命令将用户名值作为字符串返回。

$env 变量

另一种方法是将 env 驱动器视为一个变量,你可以在其中使用以下命令:

$env:username

输出:

DelftStack

.NET 环境类

Environment 类确实有一个 Username 字段,它与 $env 变量具有相同的值:当前用户的用户名。执行下面的 PowerShell 命令以获取用户名字段的值。

[System.Environment]::UserName

输出:

DelftStack

.NET WindowsIdentity 类

在 Windows 中执行以获取当前用户的另一个类是 WindowsIdentity 类。它具有 GetCurrentname 方法,可以使用如下所示。

([System.Security.Principal.WindowsIdentity]::GetCurrent().Name).Split('\')[1]

输出:

DelftStack

在 PowerShell 中使用 whoami 命令获取当前用户

whoami 命令是一个可执行文件,位于 %WINDIR%\System32 文件夹中,文件名为 whoami.exe。当我们运行以下命令时,它会生成域/用户名格式的用户名。

whoami

输出:

DESKTOP-DelftStack\DefltStack
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.

相关文章 - PowerShell User