Sdílet prostřednictvím


Rozdíly v PowerShellu na jiných platformách než Windows

PowerShell se snaží poskytovat paritu funkcí napříč všemi podporovanými platformami. Některé funkce se ale chovají jinak nebo nejsou dostupné kvůli rozdílům v .NET Core a rozdílech specifických pro platformu. Byly provedeny další změny, které zlepšují interoperabilitu PowerShellu na platformách mimo Windows.

.NET Framework vs.NET Core

PowerShell v Linuxu a macOS používá .NET Core, podmnožinu úplného rozhraní .NET Framework v systému Microsoft Windows. V důsledku toho se skripty, které běží ve Windows, nemusí spouštět na jiných platformách než Windows kvůli rozdílům v architekturách.

Další informace o změnách v .NET Core najdete v tématu Zásadní změny migrace z rozhraní .NET Framework na .NET Core.

Obecné změny interoperability unixu

  • Byla přidána podpora nativních příkazů globbingu na platformách Unix. To znamená, že můžete používat zástupné cardy s nativními příkazy, jako je ls *.txt.
  • Funkce more respektuje Linux $PAGER a výchozí nastavení less.
  • Koncové zpětné lomítko se při práci s nativními argumenty příkazu automaticky uchytává.
  • Oprava konzolyHost pro čest NoEcho na platformách Unix.
  • Nepřidávejte PATHEXT proměnnou prostředí v systému Unix.
  • Součástí powershell balíčku je stránka man-page.

Zásada provádění

PowerShell ignoruje zásady spouštění při spouštění na platformách jiných než Windows. Get-ExecutionPolicy vrátí unrestricted on Linux and macOS. Set-ExecutionPolicy nedělá nic v Linuxu a macOS.

Citlivost malých a velkých písmen v PowerShellu

PowerShell byl v minulosti jednotně nerozlišován malá a velká písmena s několika výjimkami. V operačních systémech podobných systému UNIX je systém souborů převážně citlivý na malá a velká písmena a PowerShell dodržuje standard systému souborů.

  • Pokud je název souboru zadaný v PowerShellu, musíte použít správný případ.
  • Pokud se skript pokusí načíst modul a název modulu není správný, načtení modulu se nezdaří. Toto chování může způsobit problém s existujícími skripty, pokud název, na který odkazuje modul, neodpovídá správnému případu skutečného názvu souboru.
  • Názvy v systému souborů se rozlišují malá a velká písmena, ale při dokončování názvů souborů se nerozlišují malá a velká písmena. Dokončování pomocí tabulátoru prochází seznamem názvů pomocí porovnávání bez rozlišování velkých a malých písmen.
  • Get-Help podporuje porovnávání vzorů nerozlišující malá a velká písmena na platformách Unix.
  • Import-Module při použití s názvem souboru k určení názvu modulu nerozlišuje velká a malá písmena.

Podpora systému souborů pro Linux a macOS

  • Cesty k rutinám jsou teď nezávislé na lomítko (a / \ fungují jako oddělovače adresářů).
  • Specifikace základního adresáře XDG se teď respektuje a používá se ve výchozím nastavení:
    • Cesta profilu Systému Linux/macOS se nachází na adrese ~/.config/powershell/profile.ps1
    • Cesta k uložení historie se nachází na adrese ~/.local/share/powershell/PSReadline/ConsoleHost_history.txt
    • Cesta k modulu uživatele se nachází na adrese ~/.local/share/powershell/Modules
  • Podpora názvů souborů a složek obsahujících dvojtečku v unixu.
  • Podpora názvů skriptů nebo úplných cest, které mají čárky.
  • Zjistit, kdy se k potlačení rozšíření zástupných znaků pro navigační rutiny používá parametr LiteralPath .
  • Aktualizováno Get-ChildItem tak, aby fungovalo více jako *nix ls -R a nativní příkazy systému Windows DIR /S . Get-ChildItem Teď vrátí symbolické odkazy, ke kterým došlo během rekurzivního vyhledávání, a nehledejte adresáře, na které tyto odkazy cílí.

Přípony souborů .PS1

Skripty PowerShellu musí končit .ps1 , aby interpret pochopil, jak je načíst a spustit v aktuálním procesu. Spouštění skriptů v aktuálním procesu je očekávané obvyklé chování PowerShellu. Magické číslo můžete přidat #! do skriptu, který nemá příponu .ps1 , ale to způsobí, že se skript spustí v nové instanci PowerShellu, což brání správnému fungování skriptu při prokládání objektů. Toto chování může být žádoucí při spouštění skriptu PowerShellu z prostředí Bash nebo jiného prostředí.

Odebrané aliasy pro pohodlí

PowerShell poskytuje sadu aliasů ve Windows, které se mapuje na názvy příkazů Linuxu pro usnadnění používání. V Linuxu a macOS byly odebrány "aliasy pohodlí" pro základní příkazy ls, cp, mv, rmcat, man, a ps mountbyly odebrány, aby nativní spustitelný soubor běžel bez zadání cesty.

Protokolování

V systému macOS používá PowerShell nativní os_log rozhraní API k přihlášení do systému jednotného protokolování společnosti Apple. PowerShell v Linuxu používá Syslog, všudypřítomné řešení protokolování.

Řízení úloh

V PowerShellu v Linuxu nebo macOS neexistuje podpora řízení úloh ve stylu Unix. Příkazy fg a bg příkazy nejsou k dispozici. Můžete ale použít úlohy PowerShellu, které fungují na všech platformách.

Umístění & na konec kanálu způsobí, že se kanál spustí jako úloha PowerShellu. Když je kanál na pozadí, vrátí se objekt úlohy. Jakmile je kanál spuštěný jako úloha, můžete ke správě úlohy použít všechny *-Job rutiny. Proměnné (bez ohledu na proměnné specifické pro proces) použité v kanálu se automaticky zkopírují do úlohy, takže to funguje jenom.Copy-Item $foo $bar & Úloha se spustí v aktuálním adresáři místo domovského adresáře uživatele.

Podpora vzdálené komunikace

Vzdálené komunikace Prostředí PowerShell (PSRP) využívající WinRM na platformách Unix vyžaduje NTLM/Negotiate nebo základní ověřování přes PROTOKOL HTTPS. PSRP v macOS podporuje pouze základní ověřování přes HTTPS. Ověřování založené na protokolu Kerberos se nepodporuje.

PowerShell podporuje vzdálené komunikace PowerShellu (PSRP) přes SSH na všech platformách (Windows, Linux a macOS). Další informace najdete v tématu Vzdálené komunikace SSH v PowerShellu.

Podpora just-Enough-Administration (JEA)

PowerShell v Linuxu nebo macOS neumožňuje vytvářet omezené koncové body vzdálené komunikace (JEA).

sudo, execa PowerShell

Vzhledem k tomu, že PowerShell spouští většinu příkazů v paměti (například Python nebo Ruby), nemůžete přímo s integrovanými moduly PowerShellu použít sudo . Můžete spustit pwsh z sudo. Pokud je nutné spustit rutinu PowerShellu z PowerShellu, sudonapříklad sudo Set-Date 8/18/2016, pak byste použili sudo pwsh Set-Date 8/18/2016.

Moduly zahrnuté na platformách jiných než Windows

PowerShell obsahuje pro jiné platformy než Windows následující moduly:

  • Microsoft.PowerShell.Archive
  • Microsoft.PowerShell.Core
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • PackageManagement
  • PowerShellGet
  • PSReadLine
  • ThreadJob

Velký počet příkazů (rutin), které jsou běžně dostupné v PowerShellu, nejsou dostupné v Linuxu nebo macOS. Tyto příkazy se často na tyto platformy nevztahují. Například příkazy pro funkce specifické pro Windows, jako je registr nebo služby, nejsou k dispozici. Jiné příkazy, například Set-ExecutionPolicy, jsou přítomny, ale nejsou funkční.

Úplný seznam modulů a rutin a platforem, které podporují, najdete v historii verzí modulů a rutin.

Moduly se už nedoručují pomocí PowerShellu

Z různých důvodů kompatibility už nejsou v PowerShellu zahrnuté následující moduly.

  • ISE
  • Microsoft.PowerShell.LocalAccounts
  • Microsoft.PowerShell.ODataUtils
  • Microsoft.PowerShell.Operation.Validation
  • PSScheduledJob
  • PSWorkflow
  • PSWorkflowUtility

Následující moduly specifické pro Windows nejsou součástí PowerShellu pro Linux nebo macOS.

  • CimCmdlets
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.WSMan.Management
  • PSDiagnostics

Rutiny nejsou k dispozici na platformách jiných než Windows

Některé rutiny byly odebrány z PowerShellu. Ostatní nejsou k dispozici nebo můžou na platformách jiných než Windows fungovat jinak. Úplný seznam rutin odebraných z PowerShellu najdete v tématu Rutiny odebrané z PowerShellu.

Microsoft.PowerShell.Core

V Linuxu nebo macOS nejsou k dispozici následující rutiny:

  • 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

Parametr Get-Help ShowWindow pro platformy mimo Windows není k dispozici. PowerShell 7.3 přidal rutinu Switch-Process exec a funkci pro Linux a macOS. Tyto příkazy nejsou ve Windows dostupné.

Rutiny Microsoft.PowerShell.Security

V Linuxu nebo macOS nejsou k dispozici následující rutiny:

  • Get-Acl
  • Set-Acl
  • Get-AuthenticodeSignature
  • Set-AuthenticodeSignature
  • New-FileCatalog
  • Test-FileCatalog

Tyto rutiny jsou dostupné jenom od PowerShellu 7.1.

  • Get-CmsMessage
  • Protect-CmsMessage
  • Unprotect-CmsMessage

Rutiny Microsoft.PowerShell.Management

V Linuxu a macOS nejsou k dispozici následující rutiny:

  • 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

Následující rutiny jsou k dispozici s omezeními:

  • Get-Clipboard – k dispozici v PowerShellu 7.0+
  • Set-Clipboard – k dispozici v PowerShellu 7.0+
  • Restart-Computer – k dispozici pro Linux a macOS v PowerShellu 7.1+
  • Stop-Computer – k dispozici pro Linux a macOS v PowerShellu 7.1+

Rutiny Microsoft.PowerShell.Utility

V Linuxu a macOS nejsou k dispozici následující rutiny:

  • Convert-String
  • ConvertFrom-String
  • ConvertFrom-SddlString
  • Out-GridView
  • Out-Printer
  • Show-Command

Aliasy nejsou dostupné v Linuxu nebo macOS

Následující tabulka uvádí aliasy dostupné pro Windows, které nejsou dostupné na platformách jiných než Windows. Tyto aliasy nejsou k dispozici, protože alias je v konfliktu s nativním příkazem na těchto platformách.

Alias Rutina
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

Tabulka neobsahuje aliasy, které nejsou k dispozici pro rutiny, které neexistují na platformách jiných než Windows.

Konfigurace požadovaného stavu PowerShellu (DSC)

Od PowerShellu 7.2 se modul PSDesiredStateConfiguration odebral z PowerShellu a je publikovaný v Galerie prostředí PowerShell. Další informace najdete v oznámení na blogu týmu PowerShellu. Další informace o používání DSC v Linuxu najdete v tématu Začínáme s DSC pro Linux. DSC v1.1 a v2.x nejsou v macOS podporované. DSC v3 se podporuje ve Windows, Linuxu a macOS, ale stále je v rané fázi vývoje.