如何在Windows PowerShell中获取当前用户名?
当前回答
如果你习惯批处理,你可以打电话
$user=$(cmd.exe /c echo %username%)
这基本上窃取了如果你有一个只有“echo %username%”的批处理文件的输出。
其他回答
有时,Username属性在Win32_ComputerSystem中没有数据,即使有用户登录。对我来说有用的是使用quser并解析输出。这并不完美,但很有效。例如:
$quserdata = @()
$quserdata = quser
$userid = ($quserdata[1] -split ' ')[1]
$userid
注意:如果以登录用户的身份运行,quser会在输出中添加'>'符号。然后您需要删除该符号,但这主要用于作为系统或其他帐户运行的代码,而不是登录的帐户。
$env:用户名是最简单的方法
[Environment]::UserName只返回用户名。例如,鲍勃 [System.Security.Principal.WindowsIdentity]:: GetCurrent()。Name返回用户名,在适当的地方加上域前缀。例如SOMEWHERENICE \鲍勃
在Windows上,你可以:
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
现在PowerShell Core(又名v6)已经发布了,人们可能想要编写跨平台脚本,这里的许多答案都不能在Windows以外的任何平台上工作。
[Environment]::UserName似乎是在PowerShell Core支持的所有平台上获得当前用户名的最佳方法,如果你不想在你的代码中添加平台检测和特殊的外壳。
推荐文章
- 从PowerShell ISE中的另一个PS1脚本调用PowerShell脚本PS1
- GIT克隆在windows中跨本地文件系统回购
- 如何运行一个PowerShell脚本而不显示窗口?
- PowerShell:仅为单个命令设置环境变量
- 是否有一种方法可以通过双击.ps1文件来使PowerShell脚本工作?
- 为什么这个Windows批处理文件只执行第一行,而在命令shell中执行所有三行?
- 环境变量存储在Windows注册表的哪里?
- 有一个好的Valgrind Windows的替代品吗?
- Windows和Linux上的c++编译:ifdef开关
- 如何验证批处理文件中是否存在一个文件?
- PowerShell等价于grep -f
- “Write-Host”,“Write-Output”,或“[console]::WriteLine”之间的区别是什么?
- XAMPP -端口80被PID 4的“无法打开进程”使用!12
- Awk不打印换行符
- 为什么git在Windows下记不住我的密码