Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
moreuwzględnia system Linux$PAGERi domyślnie korzysta zless. - Końcowy ukośnik odwrotny jest automatycznie unikany podczas pracy z natywnymi argumentami poleceń.
- Naprawiono ConsoleHost, aby uwzględniał
NoEchona platformach Unix. - Nie dodawaj zmiennej środowiskowej
PATHEXTw 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-Helpobsługuje dopasowywanie wzorca bez uwzględniania wielkości liter na platformach Unix. -
Import-Modulenie 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
- Ścieżka profilu systemu Linux/macOS znajduje się w
- 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 *nixls -Ri polecenia natywne systemu WindowsDIR /S.Get-ChildItemteraz 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-PSRemotingEnable-PSRemotingConnect-PSSessionDisconnect-PSSessionReceive-PSSessionGet-PSSessionCapabilityDisable-PSSessionConfigurationEnable-PSSessionConfigurationGet-PSSessionConfigurationRegister-PSSessionConfigurationSet-PSSessionConfigurationUnregister-PSSessionConfigurationTest-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-AclSet-AclGet-AuthenticodeSignatureSet-AuthenticodeSignatureNew-FileCatalogTest-FileCatalog
Te polecenia cmdlet są dostępne tylko w programie PowerShell 7.1.
Get-CmsMessageProtect-CmsMessageUnprotect-CmsMessage
Polecenia cmdlet Microsoft.PowerShell.Management
Następujące polecenia cmdlet nie są dostępne w systemach Linux i macOS:
Rename-ComputerGet-ComputerInfoGet-HotFixClear-RecycleBinGet-ServiceNew-ServiceRemove-ServiceRestart-ServiceResume-ServiceSet-ServiceStart-ServiceStop-ServiceSuspend-ServiceSet-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-StringConvertFrom-StringConvertFrom-SddlStringOut-GridViewOut-PrinterShow-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.