O Powershell tem uma vantagem SIGNIFICATIVA sobre qualquer um dos outros shells de comando. É ORIENTADO POR OBJETOS.
Em cmd, bash, etc. sua saída de um comando como dir / ls é efetivamente uma matriz de strings. Se você enviar um comando para outro, terá que processar as strings. Em Powershell, o cmdlet dir realmente fornece uma matriz de objetos de arquivo que você pode canalizar para outro comando e agir nesses objetos por meio de propriedades. Powershell é realmente um shell .net interativo. Cada cmdlet é, na verdade, um wrapper em torno de um conjunto de objetos .Net.
Toda a próxima geração de interfaces de gerenciamento provenientes da Microsoft é realmente implementada no Powershell e as interfaces da GUI são um empacotador dos comandos do Powershell, similar ao "modo Unix" de fazer ferramentas de administração da GUI.
Aqui está um exemplo de uma perspectiva do Active Directory ... Você pode usar o shell cmd.exe e um utilitário como o dsquery.exe para fazer consultas LDAP para objetos. Mas você recebe uma lista de nomes distintos de volta. Você pode então processar esses DNs como string, etc. Em Powershell v1 ou v2, você pode instalar e usar um snap de Missão. em que fornece ferramentas como get-QADUser . Quando você consulta o AD com get-QADuser , os valores de retorno são uma coleção de objetos User. Então, um comando como:
$users = get-QADUser svc_*
Retornará uma coleção que você pode processar por propriedade, por exemplo, para classificá-los pelo HomeDirectory que você usaria:
$HmDirs = get-QADUser svc_* | sort-object HomeDirectory
Não há outro shell disponível com esse recurso para o Windows. Powershell é o caminho a seguir, absolutamente.
Atualização: o PowerShell v2 agora é lançado como parte do Windows Management Framework , mas se você quiser obter o Microsoft AD cmdlets, você precisa estar executando o servidor 2008 R2 ou o Windows 7, senão ainda são os cmdlets da Quest.