Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
PowerShell ist bestrebt, Featureparität für alle unterstützten Plattformen zu bieten. Aufgrund von Unterschieden in .NET Core und plattformspezifischen Unterschieden verhalten sich einige Features jedoch anders oder sind nicht verfügbar. Weitere Änderungen wurden vorgenommen, um die Interoperabilität von PowerShell auf anderen Plattformen als Windows zu verbessern.
.NET Framework und .NET Core
PowerShell unter Linux und macOS verwendet .NET Core. Dabei handelt es sich um eine Teilmenge des vollständigen .NET Frameworks unter Microsoft Windows. Folglich können Skripts, die unter Windows ausgeführt werden, eventuell nicht auf anderen Plattformen als Windows ausgeführt werden, da die Frameworks sich unterscheiden.
Weitere Informationen zu Änderungen in .NET Core finden Sie unter Breaking Changes für die Migration von .NET Framework zu .NET Core.
Allgemeine Unix-Interoperabilitätsänderungen
- Unterstützung der nativen Verwendung von Platzhaltern in Befehlen auf Unix-Plattformen Dies bedeutet, dass Sie Platzhalter mit nativen Befehlen wie
ls *.txtverwenden können. - Die
more-Funktionalität respektiert$PAGERvon Linux und entspricht standardmäßigless. - Der abschließende umgekehrte Schrägstrich wird bei nativen Befehlsargumenten automatisch mit einem Escapezeichen versehen.
- ConsoleHost berücksichtigt auf Unix-Plattformen jetzt
NoEcho. - Fügen Sie nicht die
PATHEXT-Umgebungsvariable unter Unix hinzu. - Eine
powershell-Manpage ist im Paket enthalten.
Ausführungsrichtlinie
PowerShell ignoriert Ausführungsrichtlinien, wenn sie auf anderen Plattformen als Windows ausgeführt werden. Get-ExecutionPolicy gibt unter Linux und macOS Uneingeschränkt zurück. Set-ExecutionPolicy funktioniert nicht unter Linux und macOS.
Groß-/Kleinschreibung in PowerShell
Bisher wurde die Groß- und Kleinschreibung in PowerShell mit wenigen Ausnahmen generell nicht berücksichtigt. Auf UNIX-ähnlichen Betriebssystemen wird im Dateisystem überwiegend die Groß-/Kleinschreibung beachtet, und PowerShell hält sich an den Standard des Dateisystems.
- Sie müssen die korrekte Groß-/Kleinschreibung verwenden, wenn ein Dateiname in PowerShell angegeben wird.
- Wenn ein Skript versucht, ein Modul zu laden, und die Groß- und Kleinschreibung des Moduls nicht korrekt ist, tritt beim Laden des Moduls ein Fehler auf. Dies kann zu Problemen mit vorhandenen Skripts führen, wenn der Name, mit dem auf das Modul verwiesen wird, nicht mit der korrekten Groß- und Kleinschreibung des tatsächlichen Dateinamens übereinstimmt.
- Während bei Namen im Dateisystem die Groß-/Kleinschreibung beachtet wird, ist die Vervollständigung von Dateinamen mit der TAB-Taste nicht von der Groß-/Kleinschreibung abhängig. Die Vervollständigung mit der TAB-Taste durchläuft die Liste der Namen ohne Beachtung der Groß-/Kleinschreibung.
Get-Helpunterstützt Mustervergleiche auf Unix-Plattformen, bei denen die Groß-/Kleinschreibung nicht beachtet wird.- Bei
Import-Modulewird die Groß-/Kleinschreibung nicht beachtet, wenn der Modulname mit einem Dateinamen bestimmt werden soll.
Dateisystemunterstützung für Linux und macOS
- Pfade, die an Cmdlets übergeben werden, sind jetzt schrägstrichunabhängig, d. h., dass sowohl
/als auch\als Verzeichnistrennzeichen akzeptiert werden. - Die XDG Base Directory-Spezifikation wird eingehalten und standardmäßig verwendet:
- Der Linux/macOS-Profilpfad lautet
~/.config/powershell/profile.ps1 - Der Speicherpfad für den Verlauf lautet
~/.local/share/powershell/PSReadline/ConsoleHost_history.txt - Der Benutzermodulpfad lautet
~/.local/share/powershell/Modules
- Der Linux/macOS-Profilpfad lautet
- Unterstützung für Datei- und Ordnernamen mit Doppelpunkt unter Unix.
- Unterstützung für Skriptnamen oder vollständige Pfade, die Kommas enthalten.
- Erkennen Sie, wenn der LiteralPath-Parameter verwendet wird, um die Wildcard-Erweiterung für Navigations-Cmdlets zu unterdrücken.
Get-ChildItemwurde in der Funktionsweise anls -Rin *nix und nativeDIR /S-Windows-Befehle angeglichen.Get-ChildItemgibt jetzt die symbolischen Links zurück, die bei einer rekursiven Suche gefunden wurden, und sucht nicht in den Verzeichnissen, zu denen die Links führen.
PS1-Dateierweiterungen
PowerShell-Skripts müssen auf .ps1 enden, damit der Interpreter weiß, wie diese im aktuellen Prozess geladen und ausgeführt werden müssen. Das Ausführen von Skripts im aktuellen Prozess wird als übliches Verhalten für PowerShell vorausgesetzt. Die magische Zahl #! kann einem Skript ohne die Erweiterung .ps1 hinzugefügt werden. Dadurch wird das Skript jedoch in einer neuen PowerShell-Instanz ausgeführt, und das Austauschen von Objekten funktioniert nicht ordnungsgemäß. Dieses Verhalten kann beim Ausführen eines PowerShell-Skripts aus Bash oder einer anderen Shell wünschenswert sein.
Entfernung von einfach verwendbaren Aliases
Unter Windows stellt PowerShell einige Aliase bereit, die den Linux-Befehlsnamen zugeordnet sind und so die Benutzerfreundlichkeit erhöhen. Unter Linux und macOS wurden die einfach verwendbaren Aliase für die grundlegenden Befehle ls, cp, mv, rm, cat, man, mount und ps entfernt, damit die native ausführbare Datei ohne die Angabe eines Pfads ausgeführt werden kann.
Logging
Unter macOS verwendet PowerShell native os_log-APIs zur Anmeldung beim einheitlichen Protokollierungssystem von Apple.
Unter Linux verwendet PowerShell Syslog, eine weit verbreitete Protokollierungslösung.
Auftragssteuerung
Es gibt keine Unterstützung für die Auftragssteuerung im Unix-Format in PowerShell unter Linux oder macOS. Die Befehle fg und bg sind nicht verfügbar. Sie können jedoch PowerShell-Aufträge verwenden, die auf allen Plattformen funktionieren.
Wenn Sie ein & am Ende einer Pipeline einfügen, wird die Pipeline als PowerShell-Auftrag ausgeführt. In diesem Fall wird ein Auftragsobjekt zurückgegeben. Wird die Pipeline als Auftrag ausgeführt, kann sie mithilfe aller *-Job-Cmdlets verwaltet werden. Die in der Pipeline verwendeten Variablen (außer der prozessspezifischen) werden automatisch in den Auftrag kopiert, sodass Copy-Item $foo $bar & funktioniert. Der Auftrag wird im aktuellen Verzeichnis statt im Basisverzeichnis des Benutzers ausgeführt.
Unterstützung für das Remoting
PowerShell-Remoting (PSRP) mit WinRM auf Unix-Plattformen erfordert NTLM/Negotiate oder die Standardauthentifizierung über HTTPS. PSRP unter macOS unterstützt nur die Standardauthentifizierung über HTTPS. Die Kerberos-basierte Authentifizierung wird nicht unterstützt.
PowerShell unterstützt das PowerShell-Remoting (PSRP) auf allen Plattformen (Windows, macOS, Linux) über SSH. Weitere Informationen finden Sie unter SSH-Remoting in PowerShell.
Unterstützung für Just Enough Administration (JEA)
Mit PowerShell unter Linux oder macOS können Sie keine JEA-Remoting-Endpunkte (eingeschränkte Administrationsendpunkte) erstellen.
sudo, exec und PowerShell
Da PowerShell die meisten Befehle im Arbeitsspeicher ausführt wie Python oder Ruby, können Sie sudo nicht direkt mit integrierten PowerShell-Features verwenden. Sie können pwsh über sudo ausführen. Wenn es erforderlich ist, ein PowerShell-Cmdlet innerhalb von PowerShell mit sudo auszuführen, z. B. sudo Set-Date 8/18/2016, sollten Sie sudo pwsh Set-Date 8/18/2016 verwenden.
Module, die auf anderen Plattformen als Windows enthalten sind
Für Nicht-Windows-Plattformen umfasst PowerShell die folgenden Module:
- Microsoft.PowerShell.Archive
- Microsoft.PowerShell.Core
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- PackageManagement
- PowerShellGet
- PSReadLine
- ThreadJob
Viele Befehle (Cmdlets), die normalerweise in PowerShell verfügbar sind, sind unter Linux oder macOS nicht verfügbar. Häufig gelten diese Befehle nicht für diese Plattformen. Befehle für Windows-spezifische Features wie die Registrierung oder Dienste sind z. B. nicht verfügbar. Andere Befehle wie Set-ExecutionPolicy sind vorhanden, aber nicht funktionsfähig.
Eine umfassende Liste der Module und Cmdlets sowie der unterstützten Plattformen finden Sie unter Releaseverlauf von Modulen und Cmdlets.
Nicht mehr im Lieferumfang von PowerShell enthaltene Module
Aus verschiedenen Kompatibilitätsgründen sind die folgenden Module nicht mehr in PowerShell enthalten.
- ISE
- Microsoft.PowerShell.LocalAccounts
- Microsoft.PowerShell.ODataUtils
- Microsoft.PowerShell.Operation.Validation
- PSScheduledJob
- PSWorkflow
- PSWorkflowUtility
Die folgenden Windows-spezifischen Module sind in PowerShell für Linux oder macOS nicht enthalten.
- CimCmdlets
- Microsoft.PowerShell.Diagnostics
- Microsoft.WSMan.Management
- PSDiagnostics
Cmdlets, die auf Nicht-Windows-Plattformen nicht verfügbar sind
Einige Cmdlets wurden aus PowerShell entfernt. Andere sind nicht verfügbar oder funktionieren möglicherweise auf anderen Plattformen als Windows anders. Eine umfassende Liste der aus PowerShell entfernten Cmdlets finden Sie unter Aus PowerShell entfernte Cmdlets.
Microsoft.PowerShell.Core
Die folgenden Cmdlets sind unter Linux oder macOS nicht verfügbar:
Disable-PSRemotingEnable-PSRemotingConnect-PSSessionDisconnect-PSSessionReceive-PSSessionGet-PSSessionCapabilityDisable-PSSessionConfigurationEnable-PSSessionConfigurationGet-PSSessionConfigurationRegister-PSSessionConfigurationSet-PSSessionConfigurationUnregister-PSSessionConfigurationTest-PSSessionConfigurationFile
Der ShowWindow-Parameter von Get-Help ist für Nicht-Windows-Plattformen nicht verfügbar. Bei PowerShell 7.3 wurden das Cmdlet Switch-Process und die Funktion exec für Linux und macOS hinzugefügt. Diese Befehle sind unter Windows nicht verfügbar.
Microsoft.PowerShell.Security-Cmdlets
Die folgenden Cmdlets sind unter Linux oder macOS nicht verfügbar:
Get-AclSet-AclGet-AuthenticodeSignatureSet-AuthenticodeSignatureNew-FileCatalogTest-FileCatalog
Diese Cmdlets sind erst ab PowerShell 7.1 verfügbar.
Get-CmsMessageProtect-CmsMessageUnprotect-CmsMessage
Microsoft.PowerShell.Management-Cmdlets
Die folgenden Cmdlets sind unter Linux und macOS nicht verfügbar:
Rename-ComputerGet-ComputerInfoGet-HotFixClear-RecycleBinGet-ServiceNew-ServiceRemove-ServiceRestart-ServiceResume-ServiceSet-ServiceStart-ServiceStop-ServiceSuspend-ServiceSet-TimeZone
Die folgenden Cmdlets sind mit Einschränkungen verfügbar:
Get-Clipboard: verfügbar in PowerShell 7.0 und höherSet-Clipboard: verfügbar in PowerShell 7.0 und höherRestart-Computer: verfügbar für Linux und macOS in PowerShell 7.1 und höherStop-Computer: verfügbar für Linux und macOS in PowerShell 7.1 und höher
Microsoft.PowerShell.Utility-Cmdlets
Die folgenden Cmdlets sind unter Linux und macOS nicht verfügbar:
Convert-StringConvertFrom-StringConvertFrom-SddlStringOut-GridViewOut-PrinterShow-Command
Unter Linux oder macOS nicht verfügbar Aliase
In der folgenden Tabelle sind die für Windows verfügbaren Aliase aufgeführt, die auf Nicht-Windows-Plattformen nicht verfügbar sind. Diese Aliase sind nicht verfügbar, da der Alias zu Konflikten mit einem nativen Befehl auf diesen Plattformen führen würde.
| 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 |
Die Tabelle enthält keine Aliase, die nicht für Cmdlets verfügbar sind, die nicht auf anderen Plattformen als Windows vorhanden sind.
PowerShell Desired State Configuration (DSC)
Ab PowerShell 7.2 wurde das PSDesiredStateConfiguration-Modul aus PowerShell entfernt und im PowerShell-Katalog veröffentlicht. Weitere Informationen finden Sie im PowerShell-Teamblog in der Ankündigung. Weitere Informationen zur Verwendung von DSC unter Linux finden Sie unter Erste Schritte mit DSC für Linux. DSC v1.1 und v2.x werden unter macOS nicht unterstützt. DSC v3 wird unter Windows, Linux und macOS unterstützt, befindet aber noch in einer frühen Entwicklungsphase.