PowerShell est superficiellement similaire aux shells Unix. PowerShell possède des alias pour de nombreuses commandes auxquelles vous êtes habitué sous Unix, comme ls, rm, cp, mv, etc. Cependant, la façon dont les applets de commande derrière les alias fonctionnent est très différente.
Dans un shell * nix, tout est basé sur du texte, donc la sortie d'une commande peut être redirigée vers une autre, mais le programme récepteur doit savoir comment analyser / interpréter le texte du pipeline. C'est la principale différence entre les shells PowerShell et * nix ... dans PowerShell, tout ce qui est transmis est un objet.
La conséquence de ceci est que le piping d'une commande à une autre ne consiste pas simplement à diriger stdout vers stdin. Il envoie un objet .net à part entière au récepteur. Par conséquent, le récepteur a juste besoin de savoir comment gérer un objet de ce type. Il n'a pas besoin d'implémenter d'analyse de texte, mais il doit comprendre comment appeler les méthodes et les propriétés (membres) de l'objet d'entrée.
Dans un programme de ligne de commande * nix, vous écririez du code qui lit depuis stdin et analyse ses informations à partir du texte généré par un autre programme. Dans PowerShell, vous feriez quelque chose comme ceci:
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
}
L'appel de ce code sur la ligne de commande peut ressembler à:
PS> $myObject = New-Object MyType -arg "OriginalName"
PS> $myObject = changeName $myNewObject
OriginalName
PS> $myObject.Name
NewName
Vous pouvez également faire la même chose que ci-dessus en utilisant le mécanisme de tuyauterie, mais vous pouvez voir la différence majeure ici en ce que nous passons un objet et non du texte:
PS> $myObject = New-Object MyType -arg "OriginalName" | changeName
OriginalName
PS> $myObject.Name
NewName
Oubliant cette différence majeure, je dirais qu'il y a d'autres similitudes superficielles, mais surtout juste syntaxiquement. La syntaxe de PowerShell semble avoir été conçue avec les utilisateurs du shell * nix à l'esprit, donc une grande partie du style de langage est similaire.