如何在Windows PowerShell中获取当前用户名?
答案 0 :(得分:326)
我找到了它:
$env:UserName
还有:
$env:UserDomain
$env:ComputerName
答案 1 :(得分:153)
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
答案 2 :(得分:102)
$env:username
是最简单的方法
答案 3 :(得分:48)
我想抛出whoami命令,这在其他答案中提出的%USERDOMAIN%\%USERNAME%
基本上是一个很好的别名。
Write-Host "current user:"
Write-Host $(whoami)
答案 4 :(得分:33)
[Environment]::UserName
只返回用户名。例如。的鲍勃强>
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
返回用户名,并在适当的位置以其域为前缀。例如。的 SOMEWHERENICE \鲍勃强>
答案 5 :(得分:8)
在这里建立其他人的工作:
function draw_canvas_image() {
var canvas = document.getElementById("image-holder-canvas");
var context = canvas.getContext("2d");
var imageObj = document.getElementById("myImageToDisplayOnCanvas");
imageObj.onload = function() {
var imgWidth = imageObj.naturalWidth;
var screenWidth = canvas.width;
var scaleX = 1;
if (imgWidth > screenWidth)
scaleX = screenWidth/imgWidth;
var imgHeight = imageObj.naturalHeight;
var screenHeight = canvas.height;
var scaleY = 1;
if (imgHeight > screenHeight)
scaleY = screenHeight/imgHeight;
var scale = scaleY;
if(scaleX < scaleY)
scale = scaleX;
if(scale < 1){
imgHeight = imgHeight*scale;
imgWidth = imgWidth*scale;
}
canvas.height = imgHeight;
canvas.width = imgWidth;
context.drawImage(imageObj, 0, 0, imageObj.naturalWidth, imageObj.naturalHeight, 0,0, imgWidth, imgHeight);
}
}
答案 6 :(得分:8)
我过去曾使用$env:username
,但同事指出它是一个环境变量,可以由用户更改,因此,如果你真的想获得当前用户的用户名,你就不应该信任它
我赞成Mark Seemann的回答: [System.Security.Principal.WindowsIdentity] :: GetCurrent()。名称
但我不被允许。使用Mark的答案,如果您只需要用户名,则可能需要解析它,因为在我的系统上,它会返回hostname\username
,并且在具有域帐户的已加入域的计算机上,它将返回domain\username
。
我不会使用whoami.exe
,因为它不存在于所有版本的Windows上,而且它是对另一个二进制文件的调用,可能会让一些安全团队适合。
答案 7 :(得分:5)
既然PowerShell Core(又名v6)已经发布,并且人们可能想要编写跨平台脚本,那么这里的许多答案都不适用于除Windows以外的任何其他内容。
如果您不想在代码中添加平台检测和特殊大小写,那么 [Environment]::UserName
似乎是在PowerShell Core支持的所有平台上获取当前用户名的最佳方式。
答案 8 :(得分:0)
$username=( ( Get-WMIObject -class Win32_ComputerSystem | Select-Object -ExpandProperty username ) -split '\\' )[1]
$username
秒 用户名仅在复制和粘贴时用于显示目的。
答案 9 :(得分:-1)
我没有看到任何基于Add-Type的示例。这是一个直接使用advapi32.dll的GetUserName。
$sig = @'
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool GetUserName(System.Text.StringBuilder sb, ref Int32 length);
'@
Add-Type -MemberDefinition $sig -Namespace Advapi32 -Name Util
$size = 64
$str = New-Object System.Text.StringBuilder -ArgumentList $size
[Advapi32.util]::GetUserName($str, [ref]$size) |Out-Null
$str.ToString()
答案 10 :(得分:-1)
如果您已经习惯批量处理,可以致电
$user=$(cmd.exe /c echo %username%)
如果您的批处理文件只有&#34; echo%username%&#34;这会基本上窃取您的输出。
答案 11 :(得分:-2)
get-content "cm.txt"
write-host "entr file name"
$file = read-host
get-content $file
$content = get-content "cm.txt"
$content = get-content "cn.txt"
for each ($line in $count)
{write-host $line}
答案 12 :(得分:-2)
我发现最容易使用:cd $ home \ Desktop \
就我而言,我需要检索用户名以使脚本能够更改路径,即。 c:\ users \%username%。我需要通过更改用户桌面的路径来启动脚本。在上面和其他地方的帮助下,我可以使用get-location小程序来做到这一点。
您可能还有另一种甚至更好的方法,但这对我有用:
$ Path =获取位置
设置位置$ Path \ Desktop
答案 13 :(得分:-4)
在我的情况下,我需要检索用户名以启用脚本来更改路径,即。 c:\users\%username%\
。我需要通过更改用户桌面的路径来启动脚本。通过使用 get-location 小程序,我可以在上面和其他地方的帮助下完成此操作。
你可能有另一种甚至更好的方法,但这对我有用:
$Path = Get-Location
Set-Location $Path\Desktop