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 ze względu na różnice w programie .NET Core i różnicach specyficznych dla platformy niektóre funkcje zachowują się inaczej lub nie są dostępne. Wprowadzono dodatkowe zmiany w celu poprawy współdziałania programu PowerShell na platformach innych niż Windows.

.NET Framework a .NET Core

Program PowerShell w systemach Linux i macOS używa platformy .NET Core, która jest podzbiorem 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 Istotne zmiany dotyczące migracji z programu .NET Framework do platformy .NET Core.

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

  • Dodano obsługę natywnego tworzenia globbingu poleceń na platformach Unix. Oznacza to, że można używać symboli wieloznacznych z natywnymi poleceniami, takimi jak ls *.txt.
  • Funkcje more są zgodne z systemem Linux $PAGER i są domyślnie ustawione na less.
  • Końcowy ukośnik odwrotny jest automatycznie unikany podczas pracy z natywnymi argumentami poleceń.
  • Naprawiono element ConsoleHost do honorowania NoEcho na platformach Unix.
  • nie dodawaj PATHEXT zmiennej środowiskowej w systemie Unix
  • W powershell pakiecie znajduje się strona man-page

Zasady wykonywania

Parametr jest ignorowany podczas uruchamiania -ExecutionPolicy programu PowerShell na platformach innych niż Windows. Get-ExecutionPolicy Zwraca wartość Unrestricted 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 przypominających system UNIX system plików jest głównie uwzględniany przy użyciu wielkości liter, a program PowerShell jest zgodny ze standardem systemu plików.

  • Podczas określania pliku w programie PowerShell należy użyć prawidłowego przypadku.
  • Jeśli skrypt spróbuje załadować moduł, a nazwa modułu nie jest poprawnie przypadek, ładowanie modułu zakończy się niepowodzeniem. Może to spowodować problem z istniejącymi skryptami, jeśli nazwa, do której odwołuje się moduł, nie pasuje do prawidłowego przypadku rzeczywistej nazwy pliku.
  • Podczas gdy nazwy w systemie plików są uwzględniane w wielkości liter, uzupełnianie kart nazw plików nie jest uwzględniane 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 jest rozróżniana wielkość liter, gdy używa nazwy pliku w celu określenia nazwy modułu.

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

  • Ścieżki podane do poleceń cmdlet są teraz niezależne od ukośnika (zarówno /, jak i \ work jako separator katalogu)
  • Specyfikacja katalogu podstawowego XDG jest teraz szanowana i używana domyślnie:
    • Ścieżka profilu systemu Linux/macOS znajduje się w lokalizacji ~/.config/powershell/profile.ps1
    • Ścieżka zapisywania historii znajduje się w lokalizacji ~/.local/share/powershell/PSReadline/ConsoleHost_history.txt
    • Ścieżka modułu użytkownika znajduje się w lokalizacji ~/.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 -LiteralPath jest używana do pomijania rozszerzania symboli wieloznacznych dla poleceń cmdlet nawigacji.
  • Zaktualizowano Get-ChildItem polecenie tak, aby działało bardziej jak *nix ls -R i natywne polecenia systemu Windows DIR /S . Get-ChildItem Teraz zwraca linki symboliczne napotkane podczas wyszukiwania cyklicznego i nie wyszukuje katalogów, których dotyczą te linki.

Rozszerzenia plików PS1

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

Usunięte aliasy wygody

W systemie Windows program PowerShell udostępnia zestaw aliasów mapujących na nazwy poleceń systemu Linux dla wygody użytkownika. W systemach Linux i macOS "aliasy lswygody" dla podstawowych poleceń , , , mvmanpscprmcatmountzostały usunięte, aby umożliwić uruchamianie natywnego pliku wykonywalnego bez określania ścieżki.

Rejestrowanie

W systemie macOS program PowerShell używa natywnych os_log interfejsów API do logowania się do ujednoliconego systemu rejestrowania firmy Apple. W systemie Linux program PowerShell używa usługi 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 użyć zadań programu PowerShell, które działają na wszystkich platformach.

Umieszczenie & na końcu potoku powoduje uruchomienie potoku jako zadania programu PowerShell. Gdy potok jest w tle, zwracany jest obiekt zadania. Po uruchomieniu potoku jako zadania *-Job wszystkie polecenia cmdlet mogą służyć do zarządzania zadaniem. Zmienne (ignorujące zmienne specyficzne dla procesu) używane w potoku są automatycznie kopiowane do zadania, więc Copy-Item $foo $bar & po prostu działa. Zadanie jest również uruchamiane w bieżącym katalogu zamiast katalogu macierzystego użytkownika.

Obsługa komunikacji zdalnie

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, macOS i Linux). Aby uzyskać więcej informacji, zobacz Komunikacja zdalna SSH w programie PowerShell.

Pomoc techniczna just-enough-Administracja istration (JEA)

Możliwość tworzenia punktów końcowych administracji ograniczonej (JEA) nie jest dostępna w programie PowerShell w systemie Linux lub macOS.

sudo, execi PowerShell

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

Brakujące polecenia cmdlet

Duża liczba poleceń (poleceń cmdlet) zwykle dostępnych w programie PowerShell nie jest dostępna w systemie Linux lub macOS. W wielu przypadkach te polecenia nie mają sensu na tych platformach (np. funkcji specyficznych dla systemu Windows, takich jak rejestr). Inne polecenia, takie jak polecenia sterowania usługą, są obecne, ale nie działają. Przyszłe wersje mogą rozwiązać te problemy, usuwając uszkodzone polecenia cmdlet i dodając nowe z upływem czasu.

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.

  • Środowisko 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.

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

Polecenia cmdlet niedostępne 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
  • PackageManagement
  • PowerShellGet
  • PSDesiredStateConfiguration
  • PSReadLine
  • ThreadJob

Jednak niektóre polecenia cmdlet zostały usunięte z programu PowerShell, a 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

Parametr ShowWindow nie Get-Help jest dostępny dla platform innych niż Windows.

Polecenia cmdlet 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:

  • Clear-RecycleBin
  • Get-HotFix

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

Get-Clipboard — dostępne w systemie Linux, ale nieobsługiwane w systemie macOS 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 Stop-Computer nowszym — dostępne dla systemów Linux i macOS w programie PowerShell 7.1 lub nowszym

Polecenia cmdlet Microsoft.PowerShell.Utility

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

  • Convert-String
  • ConvertFrom-String
  • 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ż docelowe polecenie cmdlet nie jest dostępne lub alias powoduje konflikt z natywnym poleceniem na tych platformach.

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

Konfiguracja żądanego stanu programu PowerShell (DSC)

Wiele poleceń cmdlet zostało usuniętych z modułu PSDesiredStateConfiguration rozpoczynającego się w programie PowerShell 6.0. Obsługa rozszerzenia DSC na platformach innych niż Windows jest ograniczona i w większości eksperymentalna. Polecenie Invoke-DscResource cmdlet zostało przywrócone jako funkcja eksperymentalna w programie PowerShell 7.0.

Rozszerzenie DSC nie jest obsługiwane w systemie macOS.

Aby uzyskać więcej informacji na temat korzystania z rozszerzenia DSC w systemie Linux, zobacz Wprowadzenie do rozszerzenia DSC dla systemu Linux.

Począwszy od programu PowerShell 7.2 moduł PSDesiredStateConfiguration został usunięty z programu PowerShell i jest publikowany w Galeria programu PowerShell. Aby uzyskać więcej informacji, zobacz ogłoszenie w blogu zespołu programu PowerShell.