512 Stimmen

Wie kann ich den aktuellen Benutzernamen in Windows PowerShell abrufen?

Wie kann ich den aktuellen Benutzernamen in Windows PowerShell abrufen?

1voto

Knuckle-Dragger Punkte 6316

Ich habe nichts gesehen. Add-Type basierte Beispiele. Hier ist eines, das den GetUserName direkt aus advapi32.dll verwendet.

$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()

1 Stimmen

Bitte erklären Sie, was dieser Code bewirkt und warum er nützlicher ist als eine der kürzeren Methoden.

0 Stimmen

@BenjaminHubbard In der Frage wird nicht nach der kürzesten Methode gefragt, sondern danach, wie man die Aufgabe mit Powershell bewältigen kann. Dies macht den Trick anders als die anderen Beispiele, indem die Funktion innerhalb der DLL aufgerufen und die Add-Type-Methode für den Zugriff auf .NET verwendet wird.

1 Stimmen

Dies ist zwar ein neuartiger Codeblock, aber es wäre toll, wenn ich wüsste, was zum Teufel er tut. Können Sie ihn vielleicht mit Kommentaren versehen? Vielen Dank!

-2voto

shaws Punkte 1

Wenn Sie mit Batch vertraut sind, können Sie

$user=$(cmd.exe /c echo %username%)

Damit wird im Grunde die Ausgabe gestohlen, die man erhalten würde, wenn man eine Batch-Datei mit "echo %username%" hätte.

3 Stimmen

Ich stimme ab, weil: a) Sie die $(...) ist überflüssig: $a = cmd.exe /c echo %username% funktioniert, b) es ist nicht portabel, c) es beantwortet nicht die Frage, wie man es in Powershell macht, sondern wie man es in Dos macht, und es ist besser, einem Mann eine Angelrute zu geben, als ihm einen Fisch zu geben, z.B. powershell puts environment variables into $env, so %username% = $env:username .

-3voto

Kes tas Punkte 25

Ich finde es am einfachsten: cd $home \Desktop\

bringt Sie zum aktuellen Benutzer-Desktop

In meinem Fall musste ich den Benutzernamen abrufen, damit das Skript den Pfad ändern kann, d. h. c: \users\ %Benutzername%. Ich musste das Skript starten, indem ich den Pfad zum Desktop des Benutzers änderte. Mit Hilfe von oben und anderen Quellen konnte ich dies mit dem Applet get-location erreichen.

Vielleicht haben Sie eine andere oder sogar bessere Methode, aber bei mir hat es so funktioniert:

$Pfad = Get-Location

Set-Location $Pfad \Desktop

0 Stimmen

Annahmen, die sich auf das Home-Verzeichnis stützen, funktionieren nur unter ganz bestimmten Bedingungen.

0 Stimmen

Wenn Sie in einem Powershell-Terminal arbeiten und nur schnell herausfinden wollen, welcher Benutzer Sie sind, dann sollten Sie "ls ~" eingeben. Wie der oben genannte Poster kann es Ausnahmen geben, und dies ist definitiv nicht gut für Skripte, also verwenden Sie in diesem Fall das Beispiel von Edouard Poor.

-4voto

kjp Punkte 1

In meinem Fall musste ich den Benutzernamen abrufen, damit das Skript den Pfad ändern konnte, d. h.. c:\users\%username%\ . Ich musste das Skript starten, indem ich den Pfad zum Desktop des Benutzers änderte. Mit Hilfe der oben genannten und anderer Quellen konnte ich dies erreichen, indem ich die get-location Applet.

Vielleicht haben Sie eine andere oder sogar bessere Methode, aber bei mir hat es so funktioniert:

$Path = Get-Location

Set-Location $Path\Desktop

1 Stimmen

Willkommen bei Stapelüberlauf ! Dies ist gleichbedeutend mit Set-Location Desktop . ( Get-Location gibt lediglich den aktuellen Standort zurück, was bei einer Set-Location mit einem relativen Pfad).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X