1

Я изучаю 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 }

2 ответа2

1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .