Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
PowerShell si impegna a fornire parità di funzionalità in tutte le piattaforme supportate. Tuttavia, alcune funzionalità si comportano in modo diverso o non sono disponibili a causa di differenze in .NET Core e differenze specifiche della piattaforma. Sono state apportate altre modifiche per migliorare l'interoperabilità di PowerShell in piattaforme non Windows.
.NET Framework e .NET Core
PowerShell in Linux e macOS usa .NET Core, un subset di .NET Framework completo in Microsoft Windows. Di conseguenza, gli script eseguiti in Windows potrebbero non essere eseguiti su 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
- Aggiunta del supporto per il globbing dei comandi nativi nelle piattaforme Unix. Ciò significa che è possibile usare caratteri jolly con comandi nativi come
ls *.txt
. - La
more
funzionalità si attiene a Linux$PAGER
e per impostazione predefinita utilizzaless
. - La barra rovesciata finale viene preceduta automaticamente da un carattere di escape quando si gestiscono argomenti di comando nativi.
- Correzione di ConsoleHost per rispettare
NoEcho
le piattaforme Unix. - Non aggiungere
PATHEXT
una variabile di ambiente in Unix. - Nel pacchetto è inclusa una
powershell
pagina man.
Politica di esecuzione
PowerShell ignora i criteri di esecuzione durante l'esecuzione su piattaforme non Windows.
Get-ExecutionPolicy
restituisce Unrestricted su Linux e macOS.
Set-ExecutionPolicy
non esegue alcuna operazione in Linux e macOS.
Distinzione tra maiuscole e minuscole in PowerShell
Storicamente, PowerShell è stato uniformemente insensibile alle maiuscole, 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.
- È necessario utilizzare le maiuscole e minuscole corrette quando si specifica un nome file in PowerShell.
- Se uno script tenta di caricare un modulo e il nome del modulo non viene inserito correttamente, il caricamento del modulo non riesce. Questo comportamento potrebbe causare un problema con gli script esistenti se il nome a cui fa riferimento il modulo non corrisponde al caso corretto del nome file effettivo.
- Mentre i nomi nel file system fanno distinzione tra maiuscole e minuscole, il completamento automatico tramite tab dei nomi file non fa distinzione tra maiuscole e minuscole. Il completamento tramite tabulazione permette di ciclare un 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 viene usato con un nome file per determinare il nome del modulo.
Supporto del file system per Linux e macOS
- I percorsi assegnati ai cmdlet sono ora indipendenti dalla barra (entrambi
/
e\
funzionano come separatori 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 del 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 nomi di script o percorsi completi che contengono virgole.
- Rilevare quando il parametro LiteralPath viene usato per eliminare l'espansione con caratteri jolly per i cmdlet di navigazione.
- Aggiornato
Get-ChildItem
per funzionare più come i comandi nativi di *nixls -R
e di WindowsDIR /S
.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 .ps1
per consentire all'interprete di comprendere come caricarli ed eseguirli nel processo corrente. L'esecuzione di script nel processo corrente è il comportamento consueto previsto per PowerShell. È possibile aggiungere il #!
numero magico a uno script che non dispone di un'estensione .ps1
, ma in questo modo lo script viene eseguito in una nuova istanza di PowerShell, impedendo il corretto funzionamento dello script durante lo scambio di oggetti. Questo comportamento potrebbe essere utile quando si esegue uno script di PowerShell da Bash o da un'altra shell.
Alias pratici rimossi
PowerShell fornisce un insieme di alias su Windows che mappano ai nomi dei comandi Linux per comodità dell'utente. In Linux e macOS, gli "alias pratici" per i comandi ls
di base , cat
cp
rm
man
mv
, mount
, , e ps
sono stati rimossi per consentire l'esecuzione del file eseguibile nativo senza specificare un percorso.
Registrazione
In macOS PowerShell usa le API native os_log
per accedere al sistema di registrazione unificato di Apple.
In Linux PowerShell usa Syslog, una soluzione di registrazione universale.
Controllo processo
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. Tuttavia, è possibile usare i processi di PowerShell che funzionano in tutte le piattaforme.
L'inserimento &
alla fine di una pipeline determina l'esecuzione della pipeline come processo di PowerShell. Quando una pipeline è in 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 (ignorando le variabili specifiche del processo) usate nella pipeline vengono copiate automaticamente nel processo in modo che Copy-Item $foo $bar &
funzioni correttamente. Il processo viene eseguito nella directory corrente anziché nella home directory dell'utente.
Supporto per la 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, Linux e macOS). Per altre informazioni, vedere Comunicazione remota SSH in PowerShell.
Supporto just-Enough-Administration (JEA)
PowerShell su Linux o macOS non consente di creare endpoint di amministrazione vincolata (JEA).
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 usare sudo pwsh Set-Date 8/18/2016
.
Moduli inclusi 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
- PSReadLine
- ThreadJob
Un numero elevato di comandi (cmdlet) comunemente disponibili in PowerShell non è disponibile in Linux o macOS. Spesso, questi comandi non si applicano a queste piattaforme. Ad esempio, i comandi per funzionalità specifiche di Windows, ad esempio il Registro di sistema o i servizi, non sono disponibili. Altri comandi, ad esempio Set-ExecutionPolicy
, sono presenti ma non funzionali.
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
- PSLavoroProgrammatico
- 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
Alcuni cmdlet sono stati rimossi da PowerShell. Altri utenti non sono disponibili o potrebbero funzionare in modo diverso nelle piattaforme non Windows. Per un elenco completo dei cmdlet rimossi da PowerShell, vedere Cmdlet rimossi da PowerShell.
Microsoft.PowerShell.Core
I cmdlet seguenti non sono disponibili in Linux o 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
Il parametro ShowWindow di Get-Help
non è disponibile per le piattaforme non Windows. PowerShell 7.3 ha aggiunto il Switch-Process
cmdlet e la exec
funzione per Linux e macOS. Questi comandi non sono disponibili in Windows.
Cmdlet di 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
Microsoft.PowerShell.Management cmdlets
I cmdlet seguenti non sono disponibili in 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
I cmdlet seguenti sono disponibili con limitazioni:
-
Get-Clipboard
- disponibile in PowerShell 7.0+ -
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
ConvertFrom-SddlString
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é l'alias è in conflitto con un comando nativo in tali piattaforme.
Nome alternativo | Cmdlet (un piccolo script o comando in PowerShell) |
---|---|
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 |
La tabella non include alias non disponibili per i cmdlet che non esistono nelle piattaforme non Windows.
PowerShell Desired State Configuration (DSC)
A partire da PowerShell 7.2, il modulo PSDesiredStateConfiguration è stato rimosso da PowerShell ed è pubblicato in PowerShell Gallery. Per altre informazioni, vedere l'annuncio nel blog del team di PowerShell. Per altre informazioni sull'uso di DSC in Linux, vedere Introduzione a DSC per Linux. DSC v1.1 e v2.x non sono supportati in macOS. DSC v3 è supportato in Windows, Linux e macOS, ma è ancora in fase di sviluppo iniziale.