Aracılığıyla paylaş


Windows olmayan platformlardaki PowerShell farklılıkları

PowerShell, desteklenen tüm platformlarda özellik eşliği sağlamaya çalışır. Ancak bazı özellikler farklı davranır veya .NET Core ve platforma özgü farklılıklar nedeniyle kullanılamaz. Windows dışı platformlarda PowerShell'in birlikte çalışabilirliğini geliştirmek için başka değişiklikler yapıldı.

.NET Framework ile .NET Core karşılaştırması

Linux ve macOS üzerinde PowerShell, Microsoft Windows üzerinde tam .NET Framework'ün bir alt kümesi olan .NET Core'u kullanır. Sonuç olarak, Windows üzerinde çalışan betikler, çerçevelerdeki farklılıklar nedeniyle Windows dışı platformlarda çalışmayabilir.

.NET Core'daki değişiklikler hakkında daha fazla bilgi için, .NET Framework'ten .NET Core'a geçişteki önemli değişiklikler bölümüne bakın.

Genel Unix birlikte çalışabilirlik değişiklikleri

  • Unix platformlarında yerel komut globbing desteği eklendi. Bu, joker karakterleri ls *.txtgibi yerel komutlarla kullanabileceğiniz anlamına gelir.
  • more işlevi Linux $PAGER dikkate alır ve varsayılan olarak less...
  • Yerel komut bağımsız değişkenleri kullanıldığında sondaki ters eğik çizgi otomatik olarak geçiştirilir.
  • Unix platformlarında NoEcho'ı tanımak için ConsoleHost düzeltildi.
  • Unix'te PATHEXT ortam değişkeni eklemeyin.
  • Pakete bir powershell kılavuz sayfası dahildir.

Yürütme ilkesi

PowerShell, Windows dışı platformlarda çalışırken yürütme ilkelerini yoksayar. Get-ExecutionPolicy, Linux ve macOS üzerinde Kısıtlanmamış döndürür. Set-ExecutionPolicy Linux ve macOS üzerinde hiçbir şey yapmaz.

PowerShell'de büyük/küçük harf duyarlılığı

Geçmişte, PowerShell birkaç özel durum dışında tekdüzen büyük/küçük harfe duyarlı değildi. Unix benzeri işletim sistemlerinde, dosya sistemi ağırlıklı olarak büyük/küçük harfe duyarlıdır ve PowerShell, dosya sisteminin standardına bağlıdır.

  • PowerShell'de bir dosya adı belirtildiğinde doğru büyük/küçük harf kullanmanız gerekir.
  • Bir betik bir modülü yüklemeye çalışırsa ve modül adı doğru şekilde yazılmamışsa, modül yükleme işlemi başarısız olur. Modülce atıfta bulunulan ad, gerçek dosya adının uygun biçimiyle eşleşmezse, bu davranış mevcut betiklerle ilgili bir soruna neden olabilir.
  • Dosya sistemindeki adlar büyük/küçük harfe duyarlı olsa da, dosya adlarının sekmeyle tamamlanması büyük/küçük harfe duyarlı değildir. Sekme tamamlama, büyük/küçük harfe duyarsız eşleştirme yaparak ad listesinde döngü yapar.
  • Get-Help Unix platformlarında büyük/küçük harfe duyarsız desen eşleştirmeyi destekler.
  • Import-Module, modül adını belirlemek için dosya adıyla kullanıldığında büyük/küçük harfe duyarlı değildir.

Linux ve macOS için dosya sistemi desteği

  • Cmdlet'lere verilen yollar artık eğik çizgi yönünden bağımsızdır (hem / hem de \ dizin ayırıcıları olarak kullanılabilir).
  • XDG Temel Dizin Belirtimi artık varsayılan olarak kabul edilir ve kullanılır:
    • Linux/macOS profil yolu ~/.config/powershell/profile.ps1 konumunda bulunur.
    • Geçmiş kaydetme yolu ~/.local/share/powershell/PSReadLine/ConsoleHost_history.txt'da bulunur.
    • Kullanıcı modülü yolu ~/.local/share/powershell/Modules'da bulunmaktadır.
  • Unix'te iki nokta karakterini içeren dosya ve klasör adları için destek.
  • Komut dosyası adları veya virgül içeren tam yollar için destek.
  • Gezinti cmdlet'leri için joker karakter genişletmesini engellemek için LiteralPath parametresinin ne zaman kullanıldığını algılayın.
  • *nix ls -R ve Windows DIR /S yerel komutları gibi çalışacak şekilde Get-ChildItem güncelleştirildi. Get-ChildItem artık özyinelemeli arama sırasında karşılaşılan sembolik bağlantıları döndürür ve bu bağlantıların hedeflediği dizinlerde arama yapmaz.

.PS1 Dosya Uzantıları

Yorumlayıcının geçerli işlemde bunları nasıl yükleyip çalıştıracaklarını anlaması için PowerShell betiklerinin .ps1 bitmesi gerekir. Betikleri geçerli işlemde çalıştırmak, PowerShell için beklenen olağan davranıştır. #! sihirli numarasını .ps1 uzantısı olmayan bir betike ekleyebilirsiniz, ancak bu betiğin yeni bir PowerShell örneğinde çalıştırılmasına neden olur ve nesneler arasında geçiş yaparken betiğin düzgün çalışmasını engeller. Bash'ten veya diğer bir kabuktan PowerShell betiği yürütülürken bu davranış istenebilir.

Kullanımı kolay takma adlar kaldırıldı

PowerShell, Windows'ta kullanıcı kolaylığını artırmak için Linux komut isimlerine eşlenen bir diğer ad kümesi sunar. Linux ve macOS'ta, yerel yürütülebilir dosyanın bir yol belirtmeden çalışmasına izin vermek için, ls, cp, mv, rm, cat, man, mountve ps temel komutlarının "kullanışlı takma adları" kaldırıldı.

Ağaç kesimi

MacOS'ta PowerShell, yerel os_log API'lerini kullanarak Apple'ın birleşik günlüğe kaydetme sistemine. Linux'ta PowerShell, yaygın bir günlük çözümü olan Syslog 'i kullanır.

İş Denetimi

Linux veya macOS üzerinde PowerShell'de Unix stili iş denetimi desteği yoktur. fg ve bg komutları kullanılamaz. Ancak, tüm platformlarda çalışan PowerShell işleri kullanabilirsiniz.

&'ı bir işlem hattının sonuna eklemek, işlem hattının bir PowerShell işi olarak çalışmasına neden olur. bir işlem hattı arka planlandığında, bir iş nesnesi döndürülür. İşlem hattı bir iş olarak çalışmaya başladığında, işi yönetmek için tüm *-Job cmdlet'ler kullanılabilir. İşlem hattında kullanılan değişkenler (işleme özgü değişkenler yoksayılarak) otomatik olarak göreve kopyalanır, bu nedenle Copy-Item $foo $bar & sorunsuz çalışır. İş, kullanıcının ana dizini yerine geçerli dizinde çalışır.

Uzaktan İletişim Desteği

Unix platformlarında WinRM kullanan PowerShell Uzaktan İletişimi (PSRP), HTTPS üzerinden NTLM/Negotiate veya Temel Kimlik Doğrulaması gerektirir. macOS'ta PSRP yalnızca HTTPS üzerinden Temel Kimlik Doğrulamayı destekler. Kerberos tabanlı kimlik doğrulaması desteklenmez.

PowerShell, tüm platformlarda (Windows, Linux ve macOS) SSH üzerinden PowerShell Uzaktan İletişimini (PSRP) destekler. Daha fazla bilgi için bkz. PowerShell'de SSH uzaktan iletişim .

Just-Enough-Administration (JEA) Desteği

Linux veya macOS üzerinde PowerShell, kısıtlanmış yönetim (JEA) uzaktan iletişim uç noktaları oluşturmanıza izin vermez.

sudo, execve PowerShell

PowerShell, çoğu komutu (Python veya Ruby'de olduğu gibi) bellekte çalıştırdığı için, sudo'ı doğrudan PowerShell'in yerleşik komutları ile kullanamazsınız. sudo'den pwsh'i çalıştırabilirsiniz. PowerShell'in içinden bir PowerShell cmdlet'ini sudoile çalıştırmak gerekiyorsa, örneğin, sudo Set-Date 8/18/2016, sudo pwsh Set-Date 8/18/2016kullanırsınız.

Windows dışı platformlarda bulunan modüller

Windows olmayan platformlar için PowerShell aşağıdaki modülleri içerir:

  • Microsoft.PowerShell.Archive
  • Microsoft.PowerShell.Core
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • Paket Yönetimi
  • PowerShellGet
  • PSReadLine
  • ThreadJob

PowerShell'de yaygın olarak kullanılabilen çok sayıda komut (cmdlet) Linux veya macOS'ta kullanılamaz. Bu komutlar genellikle bu platformlar için geçerli değildir. Örneğin, kayıt defteri veya hizmetler gibi Windows'a özgü özelliklere yönelik komutlar kullanılamaz. Set-ExecutionPolicygibi diğer komutlar vardır ancak işlevsel değildir.

Modüllerin ve cmdlet'lerin ve destekledikleri platformların kapsamlı bir listesi için bkz. Modüllerin ve cmdlet'lerin yayın geçmişi.

Modüller artık PowerShell ile gönderilmemiş

Çeşitli uyumluluk nedenleriyle, aşağıdaki modüller artık PowerShell'e dahil değildir.

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

Aşağıdaki Windows'a özgü modüller Linux veya macOS için PowerShell'e dahil değildir.

  • CimCmdlet'ler
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.WSMan.Management
  • PSDiagnostics

Windows dışı platformlarda kullanılamayan cmdlet'ler

Bazı cmdlet'ler PowerShell'den kaldırıldı. Diğerleri kullanılamaz veya Windows dışı platformlarda farklı çalışabilir. PowerShell'den kaldırılan cmdlet'lerin kapsamlı bir listesi için bkz. PowerShell 'den kaldırılanCmdlet'leri.

Microsoft.PowerShell.Core

Linux veya macOS'ta aşağıdaki cmdlet'ler kullanılamaz:

  • 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

Get-Help ShowWindow parametresi Windows dışı platformlarda kullanılamaz. PowerShell 7.3, Linux ve macOS için Switch-Process cmdlet'ini ve exec işlevini ekledi. Bu komutlar Windows'da kullanılamaz.

Microsoft.PowerShell.Security cmdlet'leri.

Linux veya macOS'ta aşağıdaki cmdlet'ler kullanılamaz:

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

Bu cmdlet'ler yalnızca PowerShell 7.1 sürümünden itibaren kullanılabilir.

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

Microsoft.PowerShell.Management komutları

Linux ve macOS'ta aşağıdaki cmdlet'ler kullanılamaz:

  • 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

Aşağıdaki cmdlet'ler sınırlamalarla kullanılabilir:

  • Get-Clipboard - PowerShell 7.0+ ile kullanılabilir
  • Set-Clipboard - PowerShell 7.0+ ile kullanılabilir
  • Restart-Computer - PowerShell 7.1+ sürümünde Linux ve macOS için kullanılabilir
  • Stop-Computer - PowerShell 7.1+ sürümünde Linux ve macOS için kullanılabilir

Microsoft.PowerShell.Utility cmdlet'leri

Linux ve macOS'ta aşağıdaki cmdlet'ler kullanılamaz:

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

Linux veya macOS'ta diğer adlar kullanılamıyor

Aşağıdaki tabloda, Windows dışı platformlarda bulunmayan Windows için kullanılabilen diğer adlar listelenmektedir. Bu diğer adlar, bu platformlardaki yerel bir komutla çakıştığı için kullanılamaz.

Diğer Ad 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

Tablo, Windows dışı platformlarda mevcut olmayan cmdlet'ler için geçerli olmayan diğer adları içermez.

PowerShell İstenen Durum Yapılandırması (DSC)

PowerShell 7.2'den başlayarak PSDesiredStateConfiguration modülü PowerShell'den kaldırıldı ve PowerShell Galerisi'nde yayımlandı. Daha fazla bilgi için PowerShell Ekibi blogundaki duyuru bakın. Linux'ta DSC kullanma hakkında daha fazla bilgi için bkz. Linux için DSC'yi kullanmaya başlama. DSC v1.1 ve v2.x, macOS'ta desteklenmez. DSC v3 Windows, Linux ve macOS'ta desteklenir, ancak henüz erken geliştirme aşamasındadır.