PowerShell 获取当前用户
-
在 PowerShell 中使用
Win32_ComputerSystem
类获取当前用户 - 在 PowerShell 中使用环境变量获取当前用户
-
在 PowerShell 中使用
whoami
命令获取当前用户
使用 Windows 时,你几乎肯定需要知道哪些用户帐户在某个时间主动登录到计算机。值得庆幸的是,PowerShell 可以获取远程或本地计算机上的当前用户。
有许多方法可以在不使用 PowerShell 的情况下检索登录到计算机的当前用户。使用 PowerShell,你还可以通过将结果视为对象来更改结果。
例如,如果你执行询问用户凭据的脚本,PowerShell 可以动态生成用户名,而你只需要手动输入密码。
在 PowerShell 中使用 Win32_ComputerSystem
类获取当前用户
我们将使用 PowerShell cmdlet,即 Get-CimInstance
和 Get-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 在计算机上获取当前用户的另一种技术是从环境变量中检索信息。操作系统数据,例如当前用户的用户名,由环境变量表示。但是,使用环境变量主要有三种方式;无论采用何种方法,它都会得到相同的结果。
三种方式如下。
- 环境 PowerShell 驱动器
$env
变量- .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
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.