Почему этот псевдоним PowerShell не работает?

715
Vlastimil

Я изучаю PowerShell.

Я хотел бы понять, почему некоторые псевдонимы в PowerShell 5.0 под Windows 8.1 не работают.

Например, одна эта команда работает:

Get-WmiObject -Class Win32_WinSAT 

Но это не так, когда определяется в моем $profileследующем:

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

Сообщение об ошибке следующее:

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 

РЕДАКТИРОВАТЬ:

Я вижу, что псевдонимы работают немного иначе, чем в стандартном Bash на Linux, к которому я привык.

Решение состояло в том, чтобы просто объявить это как функцию:

Function wei { Get-WmiObject -Class Win32_WinSAT } 
1
Ваш псевдоним эквивалентен `& 'Get-WmiObject -Class Win32_WinSAT'`. PetSerAl 6 лет назад 1

2 ответа на вопрос

1
TOOGAM

Обычно PowerShell пытается использовать первый пробел для отделения команды от параметров. Однако вы можете использовать строку, чтобы указать, что пробел является лишь частью файла. По сути, это позволяет вам обрабатывать пространство как не специальный символ и позволяет обрабатывать что-то вроде «C: \ Program Files \ Windows NT \ Accessories \ notepad.exe», как если бы это было одно слово, а не два.

Это по сути то, что вы делаете. PowerShell не может найти команду с именем «Get-WmiObject -Class Win32_WinSAT», потому что такой команды нет. (Рассматриваемая команда - это просто «Get-WmiObject», а не «Get-WmiObject -Class Win32_WinSAT»).

Итак, теперь я определил проблему. Я понимаю, что не предоставил обходного пути / решения. Поскольку я должен быть на работе менее чем за 5 часов и должен еще поспать до этого, я позволю кому-то еще это удовольствие. Надеюсь, мой комментарий помог определить правильный путь того, что нужно было решить. TOOGAM 6 лет назад 0
1
ahmadali shafiee

Если вы хотите передать другие параметры своему псевдониму, вы можете сделать это:

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