Udostępnij za pomocą


Różnice w programie PowerShell na platformach innych niż system Windows

Program PowerShell dąży do zapewnienia parzystości funkcji na wszystkich obsługiwanych platformach. Jednak niektóre funkcje zachowują się inaczej lub nie są dostępne z powodu różnic w programie .NET Core i różnicach specyficznych dla platformy. Wprowadzono inne zmiany w celu poprawy współdziałania programu PowerShell na platformach innych niż Windows.

.NET Framework kontra .NET Core

Program PowerShell w systemach Linux i macOS używa platformy .NET Core, podzestawu pełnego programu .NET Framework w systemie Microsoft Windows. W związku z tym skrypty uruchamiane w systemie Windows mogą nie działać na platformach innych niż Windows ze względu na różnice w strukturach.

Aby uzyskać więcej informacji na temat zmian w programie .NET Core, zobacz Zmiany powodujące niezgodność dotyczące migracji z programu .NET Framework do platformy .NET Core.

Ogólne zmiany współdziałania systemu Unix

  • Dodano obsługę natywnego globbingu poleceń na platformach Unix. Oznacza to, że można używać symboli wieloznacznych z wbudowanymi poleceniami, np. ls *.txt.
  • Funkcja more uwzględnia system Linux $PAGER i domyślnie korzysta z less.
  • Końcowy ukośnik odwrotny jest automatycznie unikany podczas pracy z natywnymi argumentami poleceń.
  • Naprawiono ConsoleHost, aby uwzględniał NoEcho na platformach Unix.
  • Nie dodawaj zmiennej środowiskowej PATHEXT w systemie Unix.
  • W pakiecie znajduje się strona podręcznika powershell.

Zasady wykonywania

Program PowerShell ignoruje zasady wykonywania podczas uruchamiania na platformach innych niż Windows. Get-ExecutionPolicy zwraca Nieograniczone w systemach Linux i macOS. Set-ExecutionPolicy nic nie robi w systemach Linux i macOS.

Ważność wielkości liter w programie PowerShell

W przeszłości program PowerShell był bez uwzględniania wielkości liter z kilkoma wyjątkami. W systemach operacyjnych podobnych do Uniksa system plików jest przeważnie rozróżniający wielkość liter, a program PowerShell jest zgodny z tym standardem systemu plików.

  • Trzeba użyć poprawnego przypadku, gdy nazwa pliku jest określona w programie PowerShell.
  • Jeśli skrypt spróbuje załadować moduł, a nazwa modułu nie ma poprawnej wielkości liter, to ładowanie modułu zakończy się niepowodzeniem. To zachowanie może spowodować problem z istniejącymi skryptami, jeśli nazwa, do których odwołuje się moduł, nie pasuje do prawidłowego przypadku rzeczywistej nazwy pliku.
  • Podczas gdy nazwy w systemie plików uwzględniają wielkość liter, uzupełnianie nazw plików za pomocą tabulatora nie uwzględnia wielkości liter. Uzupełnianie tabulatorów przechodzi przez listę nazw przy użyciu dopasowywania bez uwzględniania wielkości liter.
  • Get-Help obsługuje dopasowywanie wzorca bez uwzględniania wielkości liter na platformach Unix.
  • Import-Module nie rozróżnia wielkości liter podczas używania z nazwą pliku w celu określenia nazwy modułu.

Obsługa systemu plików dla systemów Linux i macOS

  • Ścieżki podane do cmdlet są teraz agnostyczne względem ukośników (zarówno /, jak \ działają jako separatory katalogów)
  • Specyfikacja katalogu podstawowego XDG jest teraz szanowana i używana domyślnie:
    • Ścieżka profilu systemu Linux/macOS znajduje się w ~/.config/powershell/profile.ps1
    • Ścieżka zapisywania historii znajduje się w ~/.local/share/powershell/PSReadLine/ConsoleHost_history.txt
    • Ścieżka modułu użytkownika znajduje się w ~/.local/share/powershell/Modules
  • Obsługa nazw plików i folderów zawierających znak dwukropka w systemie Unix.
  • Obsługa nazw skryptów lub pełnych ścieżek, które mają przecinki.
  • Wykryj, kiedy parametr LiteralPath jest używany do zablokowania rozszerzania symboli wieloznacznych dla poleceń cmdlet nawigacyjnych.
  • Zaktualizowano Get-ChildItem, aby działały bardziej jak *nix ls -R i polecenia natywne systemu Windows DIR /S. Get-ChildItem teraz zwraca linki symboliczne napotkane podczas wyszukiwania cyklicznego i nie wyszukuje katalogów docelowych tych linków.

Rozszerzenia plików PS1

Skrypty programu PowerShell muszą kończyć się .ps1 dla interpretera, aby zrozumieć, jak załadować i uruchomić je w bieżącym procesie. Uruchamianie skryptów w bieżącym procesie jest oczekiwanym typowym zachowaniem programu PowerShell. Można dodać liczbę magiczną #! do skryptu, który nie ma rozszerzenia .ps1, ale powoduje to uruchomienie skryptu w nowym wystąpieniu programu PowerShell, uniemożliwiając poprawne działanie skryptu podczas wymiany obiektów. Takie zachowanie może być pożądane podczas wykonywania skryptu programu PowerShell z powłoki Bash lub innej powłoki.

Usunięto aliasy ułatwiające pracę

Program PowerShell na Windows udostępnia użytkownikom zestaw aliasów, które odwzorowują nazwy poleceń z systemu Linux, zwiększając wygodę użytkowania. W systemie Linux i macOS "aliasy wygody" dla podstawowych poleceń ls, cp, mv, rm, cat, man, mounti ps zostały usunięte, aby umożliwić uruchamianie natywnego pliku wykonywalnego bez określania ścieżki.

Przemysł drzewny

W systemie macOS program PowerShell używa natywnych interfejsów API os_log do logowania się do ujednoliconego systemu rejestrowania firmy Apple. W systemie Linux PowerShell używa Syslog, wszechobecnego rozwiązania do rejestrowania.

Kontrola zadania

W programie PowerShell w systemie Linux lub macOS nie ma obsługi kontroli zadań w stylu unix. Polecenia fg i bg nie są dostępne. Możesz jednak użyć zadań programu PowerShell, które działają na wszystkich platformach.

Umieszczenie & na końcu potoku powoduje jego uruchomienie jako zadania w tle w programie PowerShell. Gdy pipeline jest w tle, zwracany jest obiekt zadaniowy. Po uruchomieniu pipeline jako zadanie, wszystkie polecenia cmdlet *-Job mogą służyć do zarządzania zadaniem. Zmienne (z pominięciem zmiennych specyficznych dla procesu) używane w potoku są automatycznie kopiowane do zadania, więc Copy-Item $foo $bar & działa bez problemu. Zadanie jest uruchamiane w bieżącym katalogu zamiast katalogu macierzystego użytkownika.

Zdalne wsparcie

Komunikacja zdalna programu PowerShell (PSRP) przy użyciu usługi WinRM na platformach Unix wymaga protokołu NTLM/Negotiate lub podstawowego uwierzytelniania za pośrednictwem protokołu HTTPS. Protokół PSRP w systemie macOS obsługuje tylko uwierzytelnianie podstawowe za pośrednictwem protokołu HTTPS. Uwierzytelnianie oparte na protokole Kerberos nie jest obsługiwane.

Program PowerShell obsługuje funkcję komunikacji zdalnej programu PowerShell (PSRP) za pośrednictwem protokołu SSH na wszystkich platformach (Windows, Linux i macOS). Aby uzyskać więcej informacji, zapoznaj się z zdalną komunikacją SSH w programie PowerShell.

Pomoc techniczna just-Enough-Administration (JEA)

Program PowerShell w systemie Linux lub macOS nie umożliwia tworzenia punktów końcowych komunikacji zdalnej z ograniczonymi uprawnieniami administracyjnymi (JEA).

sudo, execi PowerShell

Ponieważ program PowerShell uruchamia większość poleceń w pamięci (takich jak Python lub Ruby), nie można używać sudo bezpośrednio z wbudowanymi modułami programu PowerShell. Możesz uruchomić pwsh z sudo. Jeśli konieczne jest uruchomienie polecenia cmdlet programu PowerShell z poziomu programu PowerShell przy użyciu sudo, na przykład sudo Set-Date 8/18/2016, należy użyć sudo pwsh Set-Date 8/18/2016.

Moduły zawarte na platformach innych niż Windows

W przypadku platform innych niż Windows program PowerShell zawiera następujące moduły:

  • Microsoft.PowerShell.Archive
  • Microsoft.PowerShell.Core
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • Zarządzanie pakietami
  • PowerShellGet
  • PSReadLine
  • ThreadJob

Duża liczba poleceń (poleceń cmdlet) często dostępnych w programie PowerShell nie jest dostępna w systemie Linux lub macOS. Często te polecenia nie mają zastosowania do tych platform. Na przykład polecenia dla funkcji specyficznych dla systemu Windows, takich jak rejestr lub usługi, nie są dostępne. Inne polecenia, takie jak Set-ExecutionPolicy, są obecne, ale nie działają.

Aby uzyskać pełną listę modułów i poleceń cmdlet oraz obsługiwane przez nie platformy, zobacz Historia wydania modułów i poleceń cmdlet.

Moduły nie są już dostarczane z programem PowerShell

Ze względu na różne przyczyny zgodności następujące moduły nie są już uwzględnione w programie PowerShell.

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

Następujące moduły specyficzne dla systemu Windows nie są uwzględnione w programie PowerShell dla systemu Linux lub macOS.

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

Polecenia cmdlet niedostępne na platformach innych niż Windows

Niektóre polecenia cmdlet zostały usunięte z programu PowerShell. Inne nie są dostępne lub mogą działać inaczej na platformach innych niż Windows. Aby uzyskać pełną listę poleceń cmdlet usuniętych z programu PowerShell, zobacz Polecenia cmdlet usunięte z programu PowerShell.

Microsoft.PowerShell.Core

Następujące polecenia cmdlet nie są dostępne w systemie Linux lub 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

Parametr ShowWindowGet-Help nie jest dostępny dla platform innych niż Windows. Program PowerShell 7.3 dodał polecenie cmdlet Switch-Process i funkcję exec dla systemów Linux i macOS. Te polecenia nie są dostępne w systemie Windows.

Polecenia cmdletów Microsoft.PowerShell.Security

Następujące polecenia cmdlet nie są dostępne w systemie Linux lub macOS:

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

Te polecenia cmdlet są dostępne tylko w programie PowerShell 7.1.

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

Polecenia cmdlet Microsoft.PowerShell.Management

Następujące polecenia cmdlet nie są dostępne w systemach Linux i 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

Następujące polecenia cmdlet są dostępne z ograniczeniami:

  • Get-Clipboard — dostępne w programie PowerShell 7.0 lub nowszym
  • Set-Clipboard — dostępne w programie PowerShell 7.0 lub nowszym
  • Restart-Computer — dostępne dla systemów Linux i macOS w programie PowerShell 7.1 lub nowszym
  • Stop-Computer — dostępne dla systemów Linux i macOS w programie PowerShell 7.1 lub nowszym

Polecenia cmdletów Microsoft.PowerShell.Utility

Następujące polecenia cmdlet nie są dostępne w systemach Linux i macOS:

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

Aliasy niedostępne w systemie Linux lub macOS

W poniższej tabeli wymieniono aliasy dostępne dla systemu Windows, które nie są dostępne na platformach innych niż Windows. Te aliasy nie są dostępne, ponieważ alias powoduje konflikt z wbudowanym poleceniem na tych platformach.

Pseudonim 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

Tabela nie zawiera aliasów niedostępnych dla poleceń cmdlet, które nie istnieją na platformach innych niż Windows.

Konfiguracja żądanego stanu programu PowerShell (DSC)

Począwszy od programu PowerShell 7.2, moduł PSDesiredStateConfiguration został usunięty z programu PowerShell i został opublikowany w galerii programu PowerShell. Aby uzyskać więcej informacji, zobacz anons na blogu zespołu programu PowerShell. Aby uzyskać więcej informacji na temat korzystania z rozszerzenia DSC w systemie Linux, zobacz Wprowadzenie do rozszerzenia DSC dla systemu Linux. DSC w wersji 1.1 i 2.x nie są obsługiwane w systemie macOS. DSC w wersji 3 jest obsługiwane w systemach Windows, Linux i macOS, ale nadal jest wciąż w początkowej fazie rozwoju.