PowerShell es superficialmente similar a los shells de Unix. PowerShell tiene alias para muchos de los comandos a los que está acostumbrado en Unix, como ls, rm, cp, mv, etc. Sin embargo, la forma en que funcionan los cmdlets detrás de los alias es bastante diferente.
En un shell * nix, todo está basado en texto, por lo que la salida de un comando se puede canalizar a otro, pero el programa receptor debe saber cómo analizar / interpretar el texto de la canalización. Esta es la principal diferencia entre PowerShell y * nix shells ... en PowerShell, todo lo que se pasa es un objeto.
La consecuencia de esto es que la canalización de un comando a otro no es simplemente canalizar stdout a stdin. Está canalizando un objeto .net completo al receptor. Por lo tanto, el receptor solo necesita saber cómo manejar un objeto de ese tipo. No necesita implementar ningún análisis de texto, pero necesita comprender cómo llamar a los métodos y propiedades (miembros) del objeto de entrada.
En un programa de línea de comando * nix, escribiría código que se lee desde stdin y analiza su información a partir del texto generado por otro programa. En PowerShell, haría algo como esto:
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
}
Llamar a este código en la línea de comando podría verse así:
PS> $myObject = New-Object MyType -arg "OriginalName"
PS> $myObject = changeName $myNewObject
OriginalName
PS> $myObject.Name
NewName
También puede hacer lo mismo que anteriormente usando el mecanismo de tubería, pero puede ver la gran diferencia aquí en que estamos pasando un objeto y no un texto:
PS> $myObject = New-Object MyType -arg "OriginalName" | changeName
OriginalName
PS> $myObject.Name
NewName
Olvidando esta gran diferencia, diría que hay otras similitudes superficiales, pero principalmente sintácticamente. La sintaxis de PowerShell parece haber sido diseñada pensando en los usuarios de shell * nix, por lo que gran parte del estilo del lenguaje es similar.