Warum funktioniert dieser PowerShell-Alias ​​nicht?

868
Vlastimil

Ich lerne PowerShell.

Ich würde gerne verstehen, warum einige Aliase in PowerShell 5.0 unter Windows 8.1 nicht funktionieren.

Zum Beispiel funktioniert dieser Befehl alleine:

Get-WmiObject -Class Win32_WinSAT 

Es gilt jedoch nicht, wenn es in meinem $profilewie folgt definiert ist:

Set-Alias -Name wei -Value 'Get-WmiObject -Class Win32_WinSAT' 

Die Fehlermeldung folgt:

PS C:\> wei wei : The term 'Get-WmiObject -Class Win32_WinSAT' is not recognized as the  name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was  included, verify that the path is correct and try again. At line:1 char:1 + wei + ~~~ + CategoryInfo : ObjectNotFound: (Get-WmiObject -Class Win32_WinSAT:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException 

BEARBEITEN:

Ich sehe, dass die Aliase ein wenig anders funktionieren als in Standard-Bash unter Linux, das ich gewohnt bin.

Die Lösung bestand darin, es einfach als Funktion zu deklarieren:

Function wei { Get-WmiObject -Class Win32_WinSAT } 
1
Ihr Alias ​​entspricht '&' Get-WmiObject -Class Win32_WinSAT ''. PetSerAl vor 6 Jahren 1

2 Antworten auf die Frage

1
TOOGAM

Normalerweise versucht PowerShell, das erste Leerzeichen zu verwenden, um den Befehl von den Parametern zu trennen. Sie können jedoch eine Zeichenfolge verwenden, um anzugeben, dass ein Leerzeichen nur Teil einer Datei ist. Auf diese Weise können Sie das Leerzeichen im Wesentlichen wie ein nicht-spezielles Zeichen behandeln und so etwas wie "C: \ Programme \ Windows NT \ Accessories \ notepad.exe" so behandeln, als ob es sich um ein Wort handele, nicht um zwei.

Das ist im Wesentlichen das, was du tust. PowerShell kann einen Befehl mit dem Namen 'Get-WmiObject -Class Win32_WinSAT' nicht finden, da ein solcher Befehl nicht vorhanden ist. (Der fragliche Befehl lautet einfach "Get-WmiObject"), nicht "Get-WmiObject-Class Win32_WinSAT".

Nun habe ich das Problem erkannt. Mir ist klar, dass ich keine Lösung für dieses Problem gefunden habe. Da ich angeblich in weniger als fünf Stunden am Arbeitsplatz sein sollte und vorher noch etwas schlafen sollte, werde ich es jemand anderem erlauben. Ich hoffe, dass mein Kommentar dazu beigetragen hat, den richtigen Weg zu finden, was gelöst werden musste. TOOGAM vor 6 Jahren 0
1
ahmadali shafiee

Wenn Sie andere Parameter an Ihren Alias ​​übergeben möchten, können Sie Folgendes tun:

function wei([Parameter(ValueFromRemainingArguments = $true)]$params) { & Get-WmiObject -Class Win32_WinSAT $params }