PowerShell jest powierzchownie podobny do powłok uniksowych. PowerShell ma aliasy dla wielu poleceń, do których jesteś przyzwyczajony w Uniksie, takich jak ls, rm, cp, mv itp. Jednak sposób, w jaki działają cmdlety za aliasami, jest zupełnie inny.
W powłoce * nix wszystko opiera się na tekście, więc dane wyjściowe z jednej komendy można przesyłać do innej, ale program odbierający musi wiedzieć, jak parsować / interpretować tekst z potoku. Jest to główna różnica między powłokami PowerShell i * nix ... w PowerShell wszystko , co jest przekazywane, to obiekt.
Konsekwencją tego jest to, że przesyłanie strumieniowe z jednego polecenia do drugiego nie jest tylko przesyłaniem strumieniowym stdout do stdin. Przesyła do odbiornika pełnoprawny obiekt .net. Dlatego odbiornik musi tylko wiedzieć, jak obsługiwać obiekt tego typu. Nie musi implementować żadnego parsowania tekstu, ale musi zrozumieć, jak wywoływać metody i właściwości (członków) obiektu wejściowego.
W programie wiersza poleceń * nix pisałbyś kod, który odczytuje ze standardowego wejścia i analizuje informacje z tekstu wygenerowanego przez inny program. W PowerShell zrobiłbyś coś takiego:
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
}
Wywołanie tego kodu w wierszu poleceń może wyglądać następująco:
PS> $myObject = New-Object MyType -arg "OriginalName"
PS> $myObject = changeName $myNewObject
OriginalName
PS> $myObject.Name
NewName
Możesz również zrobić to samo, co powyżej, korzystając z mechanizmu potokowania, ale widzisz tutaj główną różnicę w tym, że przekazujemy obiekt, a nie tekst:
PS> $myObject = New-Object MyType -arg "OriginalName" | changeName
OriginalName
PS> $myObject.Name
NewName
Zapominając o tej zasadniczej różnicy, powiedziałbym, że istnieją inne powierzchowne podobieństwa, ale głównie tylko składniowe. Wygląda na to, że składnia PowerShell została zaprojektowana z myślą o użytkownikach powłoki * nix, więc wiele stylów językowych jest podobnych.