Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O PowerShell busca fornecer paridade de recursos em todas as plataformas com suporte. No entanto, alguns recursos se comportam de maneira diferente ou não estão disponíveis devido a diferenças no .NET Core e diferenças específicas da plataforma. Outras alterações foram feitas para melhorar a interoperabilidade do PowerShell em plataformas não Windows.
.NET Framework versus .NET Core
O PowerShell no Linux e no macOS usa o .NET Core, um subconjunto do .NET Framework completo no Microsoft Windows. Como resultado, os scripts que são executados no Windows podem não ser executados em plataformas que não sejam Windows devido às diferenças nas estruturas.
Para obter mais informações sobre as alterações no .NET Core, confira Alterações interruptivas para a migração do .NET Framework para o .NET Core.
Alterações gerais de interoperabilidade do Unix
- Suporte adicionado para recurso de curinga do comando nativo em plataformas Unix. Isso significa que você pode usar curingas com comandos nativos, como
ls *.txt
. - A funcionalidade
more
respeita o Linux$PAGER
e o padrão éless
. - Uma barra invertida à direita é precedida automaticamente ao lidar com os argumentos do comando nativo.
- ConsoleHost corrigido para honrar
NoEcho
em plataformas Unix. - Não adicione a variável de ambiente
PATHEXT
no Unix. - Uma página de manual
powershell
está incluída no pacote.
Política de execução
O PowerShell ignora as políticas de execução ao ser executado em plataformas que não sejam Windows. Get-ExecutionPolicy
retorna Irrestrito no Linux e no macOS. O Set-ExecutionPolicy
não faz nenhuma ação no Linux e no macOS.
Diferenciação de maiúsculas e minúsculas no PowerShell
Historicamente, o PowerShell nunca diferenciou maiúsculas de minúsculas, com algumas exceções. Em sistemas operacionais semelhantes ao UNIX, o sistema de arquivos geralmente diferencia maiúsculas de minúsculas, e o PowerShell adere ao padrão do sistema de arquivos.
- Você deve usar o caso correto quando um nome de arquivo for especificado no PowerShell.
- Se um script tentar carregar um módulo e o nome do módulo não fizer uso correto de maiúsculas e minúsculas, o carregamento do módulo falhará. Esse comportamento poderá causar um problema com scripts existentes se o nome referenciado pelo módulo não corresponder ao caso apropriado do nome de arquivo real.
- Embora os nomes no sistema de arquivos diferenciem maiúsculas de minúsculas, o preenchimento de guia dos nomes de arquivos não o faz. O preenchimento com tabulação verifica a lista de nomes usando correspondência sem diferenciação de maiúsculas e minúsculas.
Get-Help
dá suporte a padrões correspondentes sem diferenciação de maiúsculas e minúsculas em plataformas Unix.Import-Module
não diferencia maiúsculas de minúsculas quando usado com um nome de arquivo para determinar o nome do módulo.
Suporte ao sistema de arquivos para Linux e macOS
- Os caminhos fornecidos aos cmdlets agora são independentes de barra (tanto
/
quanto\
funcionam como separadores de diretório) - Agora a Especificação de diretório básico XDG é respeitada e usada por padrão:
- O caminho de perfil do Linux/macOS está localizado em
~/.config/powershell/profile.ps1
- O caminho de salvamento do histórico está localizado em
~/.local/share/powershell/PSReadline/ConsoleHost_history.txt
- O caminho do módulo do usuário está localizado em
~/.local/share/powershell/Modules
- O caminho de perfil do Linux/macOS está localizado em
- Suporte para nomes de arquivo e de pasta que contêm o caractere de dois-pontos no Unix.
- Suporte para nomes de script ou caminhos completos com vírgulas.
- Detectar quando o parâmetro LiteralPath é usado para suprimir a expansão curinga para cmdlets de navegação.
Get-ChildItem
atualizado para funcionar de maneira mais semelhante a *nixls -R
e aos comandosDIR /S
nativos do Windows. OGet-ChildItem
agora retorna os links simbólicos encontrados durante uma pesquisa recursiva e não pesquisa os diretórios para os quais eles apontam.
Extensões de arquivo .PS1
Os scripts do PowerShell devem terminar em .ps1
para o interpretador entender como carregar e executá-los no processo atual. A execução de scripts no processo atual é o comportamento normal esperado para o PowerShell. Você pode adicionar o número mágico #!
a um script que não tenha uma extensão .ps1
, mas isso faz com que o script seja executado em uma nova instância do PowerShell, impedindo que o script funcione corretamente ao trocar objetos. Esse comportamento pode ser desejável ao executar um script do PowerShell a partir do Bash ou de outro shell.
Aliases de conveniência removidos
O PowerShell fornece um conjunto de aliases no Windows que mapeiam os nomes de comandos do Linux para conveniência do usuário. No Linux e no macOS, os "aliases de conveniência" para os comandos básicos ls
, cp
, mv
, rm
, cat
, man
, mount
e ps
foram removidos para permitir que o executável nativo seja executado sem especificar um caminho.
Logging
No macOS, o PowerShell usa as APIs os_log
nativas para fazer logon no sistema de log unificado da Apple.
No Linux, o PowerShell usa Syslog, uma solução de registro em log ubíqua.
Controle de trabalho
Não há suporte para o controle de trabalho no estilo Unix no PowerShell no Linux ou no macOS. Os comandos fg
e bg
não estão disponíveis. No entanto, você pode usar os Trabalhos do PowerShell que funcionam em todas as plataformas.
Colocar &
no final de um pipeline faz com que o pipeline seja executado como um trabalho do PowerShell. Quando um pipeline é colocado em segundo plano, um objeto de trabalho é retornado. Depois que o pipeline for executado como um trabalho, todos os cmdlets *-Job
poderão ser usados para gerenciar o trabalho. Variáveis (ignorando variáveis específicas do processo) usadas no pipeline são copiadas automaticamente para o trabalho e Copy-Item $foo $bar &
funciona. O trabalho é executado no diretório atual em vez de no diretório inicial do usuário.
Suporte à comunicação remota
A PSRP (Comunicação Remota do PowerShell) usando o WinRM em plataformas UNIX requer NTLM/Negotiate ou autenticação básica por HTTPS. A PSRP no macOS só dá suporte à autenticação básica por HTTPS. A autenticação baseada em Kerberos não é compatível.
O PowerShell dá suporte à Comunicação remota do PowerShell (PSRP) por SSH em todas as plataformas (Windows, Linux e macOS). Para obter mais informações, confira Comunicação remota SSH no PowerShell.
Suporte a JEA (Administração Just Enough)
O PowerShell no Linux ou no macOS não permite que você crie pontos de extremidade de comunicação remota de administração restrita (JEA).
sudo
, exec
e PowerShell
Como o PowerShell executa a maioria dos comandos na memória (como Python ou Ruby), você não pode usar sudo
diretamente com os internos do PowerShell. Você pode executar pwsh
a partir de sudo
. Se for necessário executar um cmdlet do PowerShell de dentro do PowerShell com sudo
, por exemplo, sudo Set-Date 8/18/2016
, você usará sudo pwsh Set-Date 8/18/2016
.
Módulos incluídos em plataformas não Windows
Para plataformas diferentes do Windows, o PowerShell inclui os seguintes módulos:
- Microsoft.PowerShell.Archive
- Microsoft.PowerShell.Core
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- PackageManagement
- PowerShellGet
- PSReadLine
- ThreadJob
Um grande número de comandos (cmdlets) comumente disponíveis no PowerShell não está disponível no Linux ou no macOS. Muitas vezes, esses comandos não se aplicam a essas plataformas. Por exemplo, os comandos para recursos específicos do Windows, como o registro ou os serviços, não estão disponíveis. Outros comandos, como Set-ExecutionPolicy
, estão presentes, mas não são funcionais.
Para uma lista abrangente de módulos e cmdlets e as plataformas às quais eles dão suporte, confira Histórico de lançamento de módulos e cmdlets.
Módulos que não são mais fornecidos com o PowerShell
Por vários motivos de compatibilidade, os módulos a seguir não estão mais incluídos no PowerShell.
- ISE
- Microsoft.PowerShell.LocalAccounts
- Microsoft.PowerShell.ODataUtils
- Microsoft.PowerShell.Operation.Validation
- PSScheduledJob
- PSWorkflow
- PSWorkflowUtility
Os módulos a seguir específicos do Windows não estão incluídos no PowerShell para Linux ou macOS.
- CimCmdlets
- Microsoft.PowerShell.Diagnostics
- Microsoft.WSMan.Management
- PSDiagnostics
Cmdlets de segurança não disponíveis em plataformas diferentes do Windows
Alguns cmdlets foram removidos do PowerShell. Outros não estão disponíveis ou podem funcionar de forma diferente em plataformas que não sejam Windows. Para ver uma lista abrangente de cmdlets removidos do PowerShell, confira Cmdlets removidos do PowerShell.
Microsoft.PowerShell.Core
Os seguintes cmdlets não estão disponíveis no Linux nem no macOS:
Disable-PSRemoting
Enable-PSRemoting
Connect-PSSession
Disconnect-PSSession
Receive-PSSession
Get-PSSessionCapability
Disable-PSSessionConfiguration
Enable-PSSessionConfiguration
Get-PSSessionConfiguration
Register-PSSessionConfiguration
Set-PSSessionConfiguration
Unregister-PSSessionConfiguration
Test-PSSessionConfigurationFile
O parâmetro ShowWindow de Get-Help
não está disponível em plataformas diferentes do Windows. O PowerShell 7.3 adicionou o cmdlet Switch-Process
e a função exec
para Linux e macOS. Esses comandos não estão disponíveis no Windows.
Cmdlets Microsoft.PowerShell.Security
Os seguintes cmdlets não estão disponíveis no Linux nem no macOS:
Get-Acl
Set-Acl
Get-AuthenticodeSignature
Set-AuthenticodeSignature
New-FileCatalog
Test-FileCatalog
Esses cmdlets só estão disponíveis no PowerShell 7.1 e em versões posteriores.
Get-CmsMessage
Protect-CmsMessage
Unprotect-CmsMessage
Cmdlets Microsoft.PowerShell.Management
Os seguintes cmdlets não estão disponíveis no Linux nem no macOS:
Rename-Computer
Get-ComputerInfo
Get-HotFix
Clear-RecycleBin
Get-Service
New-Service
Remove-Service
Restart-Service
Resume-Service
Set-Service
Start-Service
Stop-Service
Suspend-Service
Set-TimeZone
Os seguintes cmdlets estão disponíveis com limitações:
Get-Clipboard
- disponível no PowerShell 7.0+Set-Clipboard
- disponível no PowerShell 7.0+Restart-Computer
- disponível para Linux e macOS no PowerShell 7.1+Stop-Computer
- disponível para Linux e macOS no PowerShell 7.1+
Cmdlets Microsoft.PowerShell.Utility
Os seguintes cmdlets não estão disponíveis no Linux nem no macOS:
Convert-String
ConvertFrom-String
ConvertFrom-SddlString
Out-GridView
Out-Printer
Show-Command
Aliases não disponíveis no Linux nem no macOS
A tabela a seguir lista os aliases disponíveis para Windows que não estão disponíveis em plataformas diferentes do Windows. Esses aliases não estão disponíveis porque o alias entra em conflito com um comando nativo nessas plataformas.
Alias | Cmdlet |
---|---|
ac |
Add-Content |
cat |
Get-Content |
clear |
Clear-Host |
compare |
Compare-Object |
cp |
Copy-Item |
cpp |
Copy-ItemProperty |
diff |
Compare-Object |
kill |
Stop-Process |
ls |
Get-ChildItem |
man |
help |
mount |
New-PSDrive |
mv |
Move-Item |
ps |
Get-Process |
rm |
Remove-Item |
rmdir |
Remove-Item |
sleep |
Start-Sleep |
sort |
Sort-Object |
start |
Start-Process |
tee |
Tee-Object |
write |
Write-Output |
A tabela não inclui aliases indisponíveis para cmdlets que não existem em plataformas que não sejam Windows.
DSC (Desired State Configuration) do PowerShell
A partir do PowerShell 7.2, o módulo PSDesiredStateConfiguration foi removido do PowerShell e está publicado na Galeria do PowerShell. Para obter mais informações, consulte o comunicado no blog da Equipe do PowerShell. Para obter mais informações sobre como usar a DSC no Linux, confira Introdução à DSC para Linux. O DSC v1.1 e v2.x não tem suporte no macOS. O DSC v3 tem suporte no Windows, Linux e macOS, mas ainda está em desenvolvimento inicial.