Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O PowerShell se esforça para fornecer paridade de recursos em todas as plataformas suportadas. No entanto, alguns recursos se comportam de forma 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 que não sejam Windows.
.NET Framework vs .NET Core
O PowerShell no Linux e macOS usa o .NET Core, um subconjunto do .NET Framework completo no Microsoft Windows. Como resultado, os scripts executados no Windows podem não ser executados em plataformas que não sejam do Windows devido às diferenças nas estruturas.
Para obter mais informações sobre alterações no .NET Core, consulte Alterações recentes para migração do .NET Framework para o .NET Core.
Mudanças gerais de interoperabilidade Unix
- Adicionado suporte para o globbing de comandos nativos em plataformas Unix. Isso significa que tu podes usar coringas com comandos nativos como
ls *.txt
. - A funcionalidade
more
respeita o$PAGER
Linux e assume como padrãoless
. - A barra invertida à direita é automaticamente escapada ao lidar com argumentos de comando nativos.
- Fixed ConsoleHost para homenagear
NoEcho
em plataformas Unix. - Não adicione
PATHEXT
variável de ambiente 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 quando executado em plataformas que não são do Windows.
Get-ExecutionPolicy
retorna irrestrito no Linux e macOS.
Set-ExecutionPolicy
não faz nada no Linux e macOS.
Diferenciação de maiúsculas e minúsculas no PowerShell
Historicamente, o PowerShell tem sido uniformemente insensível a diferenciação de maiúsculas e minúsculas, com poucas exceções. Em sistemas operacionais Unix-like, o sistema de arquivos é predominantemente sensível a maiúsculas e minúsculas, e o PowerShell adere ao padrão do sistema de arquivos.
- Você deve usar as maiúsculas e minúsculas corretas 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 estiver inserido corretamente, o carregamento do módulo falhará. Esse comportamento pode causar um problema com scripts existentes se o nome referenciado pelo módulo não corresponder ao caso adequado do nome do arquivo real.
- Embora os nomes no sistema de arquivos diferenciem maiúsculas de minúsculas, o preenchimento de nomes de arquivos por tabulação não diferencia maiúsculas de minúsculas. Ciclos de conclusão de tabulação pela lista de nomes usando correspondência que não diferencia maiúsculas de minúsculas.
-
Get-Help
suporta correspondência de padrões sem distinção entre 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 a sistemas de arquivos para Linux e macOS
- Os caminhos dados aos cmdlets agora são independentes de barras (tanto
/
quanto\
funcionam como separadores de diretório) - XDG Base Directory Specification agora é respeitado e usado por padrão:
- O caminho do perfil 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 do perfil Linux/macOS está localizado em
- Suporte para nomes de ficheiros e pastas contendo o carácter de dois pontos no Unix.
- Suporte para nomes de script ou caminhos completos com vírgulas.
- Detecte quando o parâmetro LiteralPath é usado para suprimir a expansão de caracteres universais para cmdlets de navegação.
- O
Get-ChildItem
foi atualizado para funcionar mais como o comando nativols -R
do *nix e o comando nativo do WindowsDIR /S
.Get-ChildItem
agora retorna os links simbólicos encontrados durante uma pesquisa recursiva e não pesquisa os diretórios direcionados por esses links.
Extensões de arquivo .PS1
Os scripts do PowerShell devem terminar em .ps1
para que o intérprete entenda como carregá-los e executá-los no processo atual. A execução de scripts no processo atual é o comportamento usual esperado para o PowerShell. Você pode adicionar o #!
número mágico a um script que não tem 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 correspondem a nomes de comando do Linux para conveniência do usuário. No Linux e 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.
Registo
No macOS, o PowerShell usa as APIs de os_log
nativas para fazer logon no sistema de log unificado da Apple.
No Linux, o PowerShell usa Syslog, uma solução ubíqua de registo.
Controlo de Tarefas
Não há suporte a controle de trabalho no estilo Unix no PowerShell no Linux ou macOS. Os comandos fg
e bg
não estão disponíveis. No entanto, você pode usar tarefas 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 tarefa é retornado. Quando o pipeline estiver a ser executado como uma tarefa, todos os cmdlets *-Job
poderão ser usados para gerir a tarefa. As variáveis (ignorando variáveis específicas do processo) usadas no pipeline são copiadas automaticamente para o trabalho para que Copy-Item $foo $bar &
funcione. O trabalho é executado no diretório atual em vez do diretório inicial do usuário.
Suporte a comunicação remota
PowerShell Remoting (PSRP) usando WinRM em plataformas Unix requer NTLM/Negotiate ou Basic Auth através de HTTPS. O PSRP no macOS suporta apenas autenticação básica sobre HTTPS. A autenticação baseada em Kerberos não é suportada.
O PowerShell oferece suporte à comunicação remota do PowerShell (PSRP) sobre SSH em todas as plataformas (Windows, Linux e macOS). Para obter mais informações, consulte SSH remoting no PowerShell.
Suporte Just-Enough-Administration (JEA)
O PowerShell em Linux ou macOS não permite a criação de pontos de extremidade de administração restrita (JEA) para acesso remoto.
sudo
, exec
e PowerShell
Como o PowerShell executa a maioria dos comandos na memória (como Python ou Ruby), não se pode usar sudo
diretamente com os comandos internos do PowerShell. Pode-se 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ê usaria sudo pwsh Set-Date 8/18/2016
.
Módulos incluídos em plataformas não Windows
Para plataformas que não sejam Windows, o PowerShell inclui os seguintes módulos:
- Microsoft.PowerShell.Arquivo
- Microsoft.PowerShell.Core
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Segurança
- Microsoft.PowerShell.Utility
- Gestão de Pacotes
- PowerShellGet
- PSReadLine
- ThreadJob
Um grande número de comandos (cmdlets) normalmente disponíveis no PowerShell não está disponível no Linux ou macOS. Muitas vezes, esses comandos não se aplicam a essas plataformas. Por exemplo, comandos para recursos específicos do Windows, como o registro ou serviços, não estão disponíveis. Outros comandos, como Set-ExecutionPolicy
, estão presentes, mas não funcionais.
Para obter uma lista abrangente dos módulos e cmdlets e das plataformas que eles suportam, consulte Histórico de lançamento de módulos e cmdlets.
Os módulos 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 seguintes módulos 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 não disponíveis em plataformas não-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 obter uma lista abrangente dos cmdlets removidos do PowerShell, consulte Cmdlets removidos do PowerShell.
Microsoft.PowerShell.Core
Os seguintes cmdlets não estão disponíveis no Linux ou 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 para plataformas que não sejam Windows. O PowerShell 7.3 adicionou o cmdlet Switch-Process
e a função exec
para Linux e macOS. Estes comandos não estão disponíveis no Windows.
Cmdlets Microsoft.PowerShell.Security
Os seguintes cmdlets não estão disponíveis no Linux ou macOS:
Get-Acl
Set-Acl
Get-AuthenticodeSignature
Set-AuthenticodeSignature
New-FileCatalog
Test-FileCatalog
Esses cmdlets só estão disponíveis a partir do PowerShell 7.1.
Get-CmsMessage
Protect-CmsMessage
Unprotect-CmsMessage
Cmdlets Microsoft.PowerShell.Management
Os seguintes cmdlets não estão disponíveis no Linux e 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 e macOS:
Convert-String
ConvertFrom-String
ConvertFrom-SddlString
Out-GridView
Out-Printer
Show-Command
Aliases não disponíveis no Linux ou macOS
A tabela a seguir lista os aliases disponíveis para Windows que não estão disponíveis em plataformas que não sejam Windows. Esses aliases não estão disponíveis porque o alias entra em conflito com um comando nativo nessas plataformas.
Nome alternativo | 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 não-Windows.
Configuração de Estado Desejado (DSC) do PowerShell
A partir do PowerShell 7.2, o módulo PSDesiredStateConfiguration foi removido do PowerShell e é publicado na Galeria do PowerShell. Para obter mais informações, consulte o de anúncio de no blog da Equipe do PowerShell. Para obter mais informações sobre como usar o DSC no Linux, consulte Introdução ao DSC para Linux. DSC v1.1 e v2.x não são suportados no macOS. O DSC v3 é suportado no Windows, Linux e macOS, mas ainda está em desenvolvimento inicial.