Differenze di PowerShell nelle piattaforme non Windows
PowerShell si impegna a fornire parità di funzionalità in tutte le piattaforme supportate. Tuttavia, a causa di differenze in .NET Core e differenze specifiche della piattaforma, alcune funzionalità si comportano in modo diverso o non sono disponibili. Sono state apportate modifiche aggiuntive per migliorare l'interoperabilità di PowerShell in piattaforme non Windows.
.NET Framework e .NET Core
PowerShell in Linux e macOS usa .NET Core, che è un subset di .NET Framework completo in Microsoft Windows. Di conseguenza, gli script eseguiti in Windows potrebbero non essere eseguiti in piattaforme non Windows a causa delle differenze nei framework.
Per altre informazioni sulle modifiche in .NET Core, vedere Modifiche di rilievo per la migrazione da .NET Framework a .NET Core.
Modifiche generali all'interoperabilità unix
- Aggiunto il supporto per il glob dei comandi nativi nelle piattaforme Unix. Ciò significa che è possibile usare caratteri jolly con comandi nativi come
ls *.txt
. - La funzionalità
more
rispetta il$PAGER
di Linux con valore predefinitoless
. - La barra rovesciata finale viene automaticamente preceduta da un carattere di escape quando si usano argomenti di comandi nativi.
- Correzione di ConsoleHost per rispettare
NoEcho
sulle piattaforme Unix. - non aggiungere una
PATHEXT
variabile di ambiente in Unix - Nel pacchetto è inclusa una
powershell
pagina man
Criterio di esecuzione
Il -ExecutionPolicy
parametro viene ignorato quando si esegue PowerShell in piattaforme non Windows.
Get-ExecutionPolicy
restituisce Unrestricted in Linux e macOS. Set-ExecutionPolicy
non esegue alcuna operazione in Linux e macOS.
Distinzione tra maiuscole e minuscole in PowerShell
PowerShell non ha fatto storicamente distinzione tra maiuscole e minuscole in modo coerente e con poche eccezioni. Nei sistemi operativi simili a UNIX, il file system fa prevalentemente distinzione tra maiuscole e minuscole e PowerShell rispetta lo standard del file system.
- Quando si specifica un file in PowerShell, è necessario usare la corretta combinazione di maiuscole/minuscole.
- Se uno script tenta di caricare un modulo e il nome del modulo non viene inserito correttamente, il caricamento del modulo non riesce. Ciò può causare un problema con gli script esistenti se il nome in base al quale viene fatto riferimento al modulo non corrisponde al caso corretto del nome file effettivo.
- Mentre i nomi nel file system fanno distinzione tra maiuscole e minuscole, il completamento tramite tabulazione dei nomi file non fa distinzione tra maiuscole e minuscole. Il completamento tramite tabulazione scorre l'elenco di nomi usando la corrispondenza senza distinzione tra maiuscole e minuscole.
Get-Help
supporta criteri di ricerca senza distinzione tra maiuscole e minuscole nelle piattaforme Unix.Import-Module
non fa distinzione tra maiuscole e minuscole quando usa un nome file per determinare il nome del modulo.
Supporto del file system per Linux e macOS
- I percorsi usati dai cmdlet sono ora indipendenti dalla barra (sia / che \ funzionano come separatore di directory)
- La specifica della directory di base XDG viene ora rispettata e usata per impostazione predefinita:
- Il percorso del profilo Linux/macOS si trova in
~/.config/powershell/profile.ps1
- Il percorso di salvataggio della cronologia si trova in
~/.local/share/powershell/PSReadline/ConsoleHost_history.txt
- Il percorso modulo utente si trova in
~/.local/share/powershell/Modules
- Il percorso del profilo Linux/macOS si trova in
- Supporto per i nomi di file e cartelle contenenti il carattere due punti in Unix.
- Supporto per i nomi di script o i percorsi completi con virgole.
- Viene rilevato quando si usa
-LiteralPath
per eliminare l'espansione di caratteri jolly per i cmdlet di navigazione. Get-ChildItem
aggiornata per funzionare in modo più simile ai comandi nativils -R
di *nix eDIR /S
di Windows.Get-ChildItem
restituisce ora i collegamenti simbolici rilevati durante una ricerca ricorsiva e non esegue ricerche nelle directory di destinazione di tali collegamenti.
Estensioni di file PS1
Gli script di PowerShell devono terminare in .ps1
affinché l'interprete possa capire come caricarli ed eseguirli nel processo corrente. L'esecuzione di script nel processo corrente è il comportamento normale previsto per PowerShell. È possibile aggiungere il numero chiave #!
a uno script senza estensione .ps1
. In tal caso, tuttavia, lo script viene eseguito in una nuova istanza di PowerShell impedendo il corretto funzionamento dello script con oggetti interscambiabili. Questo può essere il comportamento auspicabile quando si esegue uno script di PowerShell da bash
o un'altra shell.
Alias pratici rimossi
In Windows, PowerShell offre un set di alias corrispondenti a nomi di comandi di Linux per comodità degli utenti. In Linux e macOS, gli "alias pratici" per i comandi ls
di base , cat
cp
rm
man
mv
, mount
sono ps
stati rimossi per consentire l'esecuzione del file eseguibile nativo senza specificare un percorso.
Registrazione
In macOS PowerShell usa le API os_log
native per accedere al sistema di registrazione unificato di Apple.
In Linux PowerShell usa Syslog, una soluzione di registrazione universale.
Controllo dei processi
In PowerShell in Linux o macOS non è disponibile alcun supporto per il controllo dei processi in stile Unix. I fg
comandi e bg
non sono disponibili. È possibile usare i processi di PowerShell che funzionano in tutte le piattaforme.
Il posizionamento di &
alla fine di una pipeline causa l'esecuzione della pipeline come processo di PowerShell. Quando una pipeline è supportata da un background, viene restituito un oggetto processo. Quando la pipeline è in esecuzione come processo, tutti i *-Job
cmdlet possono essere usati per gestire il processo. Le variabili usate nella pipeline, ignorando quelle specifiche del processo, vengono copiate automaticamente nel processo in modo tale che Copy-Item $foo $bar &
funzioni. Il processo viene inoltre eseguito nella directory corrente anziché nella home directory dell'utente.
Supporto della comunicazione remota
La comunicazione remota di PowerShell (PSRP) con WinRM nelle piattaforme Unix richiede NTLM/Negotiate o Autenticazione di base su HTTPS. PSRP in macOS supporta solo l'autenticazione di base su HTTPS. L'autenticazione basata su Kerberos non è supportata.
PowerShell supporta la comunicazione remota di PowerShell (PSRP) su SSH in tutte le piattaforme (Windows, macOS e Linux). Per altre informazioni, vedere Comunicazione remota SSH in PowerShell.
Supporto di JEA (Just Enough Administration)
La possibilità di creare endpoint remoti JEA (Constrained Administration) non è disponibile in PowerShell in Linux o macOS.
sudo
, exec
e PowerShell
Poiché PowerShell esegue la maggior parte dei comandi in memoria (ad esempio Python o Ruby), non è possibile usare sudo direttamente con powerShell predefiniti. È possibile eseguire pwsh
da sudo. Se è necessario eseguire un cmdlet di PowerShell da PowerShell con sudo, ad esempio , sudo Set-Date 8/18/2016
è necessario eseguire sudo pwsh Set-Date 8/18/2016
.
Cmdlet mancanti
Un numero elevato di comandi (cmdlet) normalmente disponibili in PowerShell non è disponibile in Linux o macOS. In molti casi, questi comandi non sono significativi per queste piattaforme (ad esempio, funzionalità specifiche di Windows come il Registro di sistema). Sono presenti altri comandi come i comandi del controllo del servizio, ma non funzionali. Nelle versioni future questi problemi verranno risolti con la correzione dei cmdlet non funzionanti e con l'aggiunta di nuovi cmdlet.
Per un elenco completo di moduli e cmdlet e delle piattaforme supportate, vedere Cronologia delle versioni di moduli e cmdlet.
I moduli non vengono più forniti con PowerShell
Per diversi motivi di compatibilità, i moduli seguenti non sono più inclusi in PowerShell.
- ISE
- Microsoft.PowerShell.LocalAccounts
- Microsoft.PowerShell.ODataUtils
- Microsoft.PowerShell.Operation.Validation
- PSScheduledJob
- PSWorkflow
- PSWorkflowUtility
I moduli specifici di Windows seguenti non sono inclusi in PowerShell per Linux o macOS.
- CimCmdlets
- Microsoft.PowerShell.Diagnostics
- Microsoft.WSMan.Management
- PSDiagnostics
Cmdlet non disponibili nelle piattaforme non Windows
Per le piattaforme non Windows, PowerShell include i moduli seguenti:
- Microsoft.PowerShell.Archive
- Microsoft.PowerShell.Core
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- Modulo PackageManagement
- PowerShellGet
- PSDesiredStateConfiguration
- PSReadLine
- ThreadJob
Tuttavia, alcuni cmdlet sono stati rimossi da PowerShell e altri non sono disponibili o possono funzionare in modo diverso su piattaforme non Windows. Per un elenco completo dei cmdlet rimossi da PowerShell, vedere Cmdlet rimossi da PowerShell.
Microsoft.PowerShell.Core
Il parametro ShowWindow di Get-Help
non è disponibile per le piattaforme non Windows.
Cmdlet Microsoft.PowerShell.Security
I cmdlet seguenti non sono disponibili in Linux o macOS:
Get-Acl
Set-Acl
Get-AuthenticodeSignature
Set-AuthenticodeSignature
New-FileCatalog
Test-FileCatalog
Questi cmdlet sono disponibili solo a partire da PowerShell 7.1.
Get-CmsMessage
Protect-CmsMessage
Unprotect-CmsMessage
Cmdlet Microsoft.PowerShell.Management
I cmdlet seguenti non sono disponibili in Linux e macOS:
Clear-RecycleBin
Get-HotFix
I cmdlet seguenti sono disponibili con limitazioni:
Get-Clipboard
- disponibile in Linux ma non supportato in macOS Set-Clipboard
- disponibile in PowerShell 7.0+ Restart-Computer
- disponibile per Linux e macOS in PowerShell 7.1+ Stop-Computer
- disponibile per Linux e macOS in PowerShell 7.1+
Cmdlet di Microsoft.PowerShell.Utility
I cmdlet seguenti non sono disponibili in Linux e macOS:
Convert-String
ConvertFrom-String
Out-GridView
Out-Printer
Show-Command
Alias non disponibili in Linux o macOS
La tabella seguente elenca gli alias disponibili per Windows che non sono disponibili nelle piattaforme non Windows. Questi alias non sono disponibili perché il cmdlet di destinazione non è disponibile o l'alias è in conflitto con un comando nativo in tali piattaforme.
Alias | Cmdlet |
---|---|
ac |
Add-Content |
cat |
Get-Content |
clear |
Clear-Host |
cnsn |
Connect-PSSession |
compare |
Compare-Object |
cp |
Copy-Item |
cpp |
Copy-ItemProperty |
diff |
Compare-Object |
dnsn |
Disconnect-PSSession |
gsv |
Get-Service |
kill |
Stop-Process |
ls |
Get-ChildItem |
man |
help |
mount |
New-PSDrive |
mv |
Move-Item |
ogv |
Out-GridView |
ps |
Get-Process |
rm |
Remove-Item |
rmdir |
Remove-Item |
sasv |
Start-Service |
shcm |
Show-Command |
sleep |
Start-Sleep |
sort |
Sort-Object |
spsv |
Stop-Service |
start |
Start-Process |
tee |
Tee-Object |
write |
Write-Output |
PowerShell Desired State Configuration (DSC)
Molti cmdlet sono stati rimossi dal modulo PSDesiredStateConfiguration a partire da PowerShell 6.0.
Il supporto per DSC su piattaforme non Windows è limitato e per lo più sperimentale. Il Invoke-DscResource
cmdlet è stato ripristinato come funzionalità sperimentale in PowerShell 7.0.
DSC non è supportato in macOS.
Per altre informazioni sull'uso di DSC in Linux, vedere Introduzione a DSC per Linux.
A partire da PowerShell 7.2, il modulo PSDesiredStateConfiguration è stato rimosso da PowerShell e viene pubblicato in PowerShell Gallery. Per altre informazioni, vedere l'annuncio nel blog del team di PowerShell.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per