Я услышал некоторые вещи о функциях PowerShell. Часть его походит на типичные функции оболочек Unix.
Таким образом, кажется, что Powershell включает передачу по каналу и commandlets, подобный сценариям оболочки. Но я еще не попробовал его (никакой Windows), таким образом, я могу быть неправым.
Таким образом, мой вопрос: действительно ли Powershell подобен оболочке Unix, или действительно ли понятие отличается?
Если последний: По каким точкам отличается понятие?
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, кажется, был разработан с *, отклоняют пользователей оболочки в памяти, таким образом, много стиля языка подобно.