如何在Windows PowerShell中获取当前用户名?

时间:2010-01-18 11:50:33

标签: windows powershell scripting

如何在Windows PowerShell中获取当前用户名?

14 个答案:

答案 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)

  1. get-content "cm.txt"
  2. write-host "entr file name" $file = read-host get-content $file
  3. $content = get-content "cm.txt"
  4. $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