PowerShell по сравнению с Unix Shell

Я услышал некоторые вещи о функциях PowerShell. Часть его походит на типичные функции оболочек Unix.

Таким образом, кажется, что Powershell включает передачу по каналу и commandlets, подобный сценариям оболочки. Но я еще не попробовал его (никакой Windows), таким образом, я могу быть неправым.

Таким образом, мой вопрос: действительно ли Powershell подобен оболочке Unix, или действительно ли понятие отличается?
Если последний: По каким точкам отличается понятие?

14
задан 18.12.2010, 04:40

1 ответ

PowerShell поверхностно подобен оболочкам Unix. PowerShell имеет псевдонимы для многих команд, к которым Вы привыкли в Unix, как ls, комната, CP, mv, и т.д. Однако способ, которым cmdlets позади работы псевдонимов очень отличается.

В *отклоняют оболочку, все - базирующийся текст, таким образом произведенный от одной команды может быть передан по каналу другому, но программа получения должна знать, как анализировать/интерпретировать текст от конвейера. Это - основное различие между PowerShell, и *отклоняют оболочки... в PowerShell, все, что роздано, объект.

Последствие этого - то, что передача по каналу от одной команды до другого не просто передает stdout по каналу к stdin. Это передает законченный объект .NET по каналу к получателю. Поэтому получатель просто должен знать, как обработать объект того типа. Это не должно реализовывать парсинг текста, но это должно понять, как назвать методы и свойства (члены) входного объекта.

В *отклоняют программу командной строки, Вы написали бы код, который читает из stdin и анализирует его информацию из текста другая сгенерированная программа. В PowerShell Вы сделали бы что-то вроде этого:

function changeName($myObject)
{
    if ($myObject.GetType() -eq [MyType])
    {
        #print the current name to screen
        $myObject.Name
        #change string in the 'name' property
        $myObject.Name = "NewName"
    }
    return $myObject
}

Вызов этого кода командной строки мог бы быть похожим:

PS> $myObject = New-Object MyType -arg "OriginalName"
PS> $myObject = changeName $myNewObject
OriginalName
PS> $myObject.Name
NewName

Вы могли также сделать то же как выше использования механизма передачи по каналу, но Вы видите существенное различие здесь в этом, мы передаем объект и не текст:

PS> $myObject = New-Object MyType -arg "OriginalName" | changeName
OriginalName
PS> $myObject.Name
NewName

Забывая это существенное различие, я сказал бы, что существуют другие поверхностные общие черты, но главным образом просто синтаксически. Синтаксис PowerShell, кажется, был разработан с *, отклоняют пользователей оболочки в памяти, таким образом, много стиля языка подобно.

20
ответ дан 07.12.2019, 11:18

Теги

Похожие вопросы