Esta división fue probado por expertos así se garantiza la exactitud de este artículo.
Solución:
Lo encontré:
$env:UserName
También hay:
$env:UserDomain
$env:ComputerName
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
Pensé que sería valioso resumir y comparar las respuestas dadas.
Si desea acceder a la Variable ambiental:
(opción más fácil/más corta/memorable)
[Environment]::UserName
— @ThomasBratt$env:username
— @Eoinwhoami
— @galaktor
Si desea acceder a la Token de acceso de Windows:
(opción más confiable)
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
— @MarkSeemann
Si desea el nombre del usuario registrado
(en lugar del nombre del usuario que ejecuta la instancia de PowerShell)
$(Get-WMIObject -class Win32_ComputerSystem | select username).username
— @TwonOfAn en este otro foro
Comparación
El comentario de @Kevin Panko sobre la respuesta de @Mark Seemann trata de elegir una de las categorías sobre la otra:
[The Windows access token approach] es la respuesta más segura, porque el usuario puede modificar $env:USERNAME, pero no se dejará engañar al hacerlo.
En breve, la opción de variable de entorno es más sucinta y la opción de token de acceso de Windows es más confiable.
Tuve que usar el enfoque de token de acceso de Windows de @Mark Seemann en un script de PowerShell que estaba ejecutando desde una aplicación C# con suplantación.
La aplicación C# se ejecuta con mi cuenta de usuario y ejecuta el script de PowerShell como una cuenta de servicio. Debido a una limitación en la forma en que ejecuto el script de PowerShell desde C#, la instancia de PowerShell usa las variables de entorno de mi cuenta de usuario, aunque se ejecuta como el usuario de la cuenta de servicio.
En esta configuración, las opciones de variables de entorno devuelven mi nombre de cuenta, y la opción de token de acceso de Windows devuelve el nombre de cuenta de servicio (que es lo que quería), y la opción de usuario conectado devuelve mi nombre de cuenta.
Pruebas
Además, si desea comparar las opciones usted mismo, aquí hay un script que puede usar para ejecutar un script como otro usuario. Debe usar el cmdlet Get-Credential para obtener un objeto de credencial y luego ejecutar este script con el script para ejecutar como otro usuario como argumento 1 y el objeto de credencial como argumento 2.
Uso:
$cred = Get-Credential UserTo.RunAs
Run-AsUser.ps1 "whoami; pause" $cred
Run-AsUser.ps1 "[System.Security.Principal.WindowsIdentity]::GetCurrent().Name; pause" $cred
Contenido del script Run-AsUser.ps1:
param(
[Parameter(Mandatory=$true)]
[string]$script,
[Parameter(Mandatory=$true)]
[System.Management.Automation.PsCredential]$cred
)
Start-Process -Credential $cred -FilePath 'powershell.exe' -ArgumentList 'noprofile','-Command',"$script"
Más adelante puedes encontrar las acotaciones de otros usuarios, tú incluso puedes insertar el tuyo si lo deseas.