Windows dışı platformlardaki PowerShell farklılıkları


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

.NET Framework ve .NET Core

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

.NET Core'daki değişiklikler hakkında daha fazla bilgi için bkz. .NET Framework'ten .NET Core'a geçişte son değişiklikler.

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

  • Unix platformlarında yerel komut genellemesi için destek eklendi. Bu, ls *.txt gibi yerel komutlarla joker karakterler kullanabileceğiniz anlamına gelir.
  • more işlevi Linux $PAGER'a saygı gösterir ve varsayılan olarak less şeklindedir.
  • Yerel komut bağımsız değişkenleriyle uğraşırken sondaki ters eğik çizgiden otomatik olarak kaçılır.
  • ConsoleHost'un Unix platformlarında NoEcho'yu onurlandırması düzeltildi.
  • Unix'e PATHEXT ortam değişkenini eklemeyin.
  • Pakete bir powershell kılavuz sayfası dahildir.

Yürütme politikası

PowerShell, Windows dışı platformlarda çalışırken yürütme ilkelerini yok sayar. Get-ExecutionPolicy, Linux ve macOS'ta Kısıtlanmamış değerini döndürür. Set-ExecutionPolicy, Linux ve macOS'ta hiçbir şey yapmaz.

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

Tarihsel olarak PowerShell, birkaç istisna dışında aynı şekilde büyük/küçük harfe duyarlı değildir. 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 uyar.

  • PowerShell'de bir dosya adı belirtildiğinde doğru büyük/küçük harfi kullanmanız gerekir.
  • Bir komut dosyası bir modülü yüklemeye çalışırsa ve modül adı doğru şekilde yazılmazsa modül yükleme işlemi başarısız olur. Bu davranış, modül tarafından başvurulan adın gerçek dosya adının büyük/küçük harf durumuyla eşleşmemesi durumunda mevcut komut dosyalarında 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 duyarlı olmayan eşleştirmeyi kullanarak ad listesi boyunca geçiş yapar.
  • Get-Help, Unix platformlarında büyük/küçük harfe duyarlı olmayan kalıp eşleştirmeyi destekler.
  • Import-Module, modül adını belirlemek için bir dosya adıyla birlikte 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 çizgiden bağımsızdır (hem / hem de \ dizin ayırıcıları olarak çalışır)
  • XDG Temel Dizin Belirtimi artık varsayılan olarak dikkate alınmakta ve kullanılmaktadır:

    • Linux/macOS profil yolu ~/.config/powershell/profile.ps1 konumunda bulunur
    • Geçmişi kaydetme yolu ~/.local/share/powershell/PSReadline/ConsoleHost_history.txt adresinde bulunur.
    • Kullanıcı modülü yolu ~/.local/share/powershell/Modules konumunda bulunur
  • Unix'te iki nokta üst üste karakterini içeren dosya ve klasör adları desteği.
  • Komut dosyası adları veya virgül içeren tam yollar için destek.
  • Gezinme cmdlet'leri için joker karakter genişletmesini bastırmak amacıyla LiteralPath parametresinin ne zaman kullanıldığını algılayın.
  • Get-ChildItem, *nix ls -R ve Windows DIR /S yerel komutlarına daha çok benzeyecek şekilde güncellendi. Get-ChildItem artık özyinelemeli arama sırasında karşılaşılan sembolik bağlantıları döndürüyor ve bu bağlantıların hedeflediği dizinlerde arama yapmıyor.

.PS1 Dosya Uzantıları

Yorumlayıcının mevcut süreçte bunları nasıl yükleyeceğini ve çalıştıracağını anlaması için PowerShell komut dosyalarının .ps1 ile bitmesi gerekir. Geçerli süreçte komut dosyalarının çalıştırılması PowerShell için beklenen olağan davranıştır. #! sihirli numarasını .ps1 uzantısı olmayan bir betiğe ekleyebilirsiniz, ancak bu, betiğin yeni bir PowerShell örneğinde çalıştırılmasına neden olur ve Nesneleri değiştirirken betiğin düzgün çalışmasını engelliyor. Bu davranış, Bash'ten veya başka bir kabuktan bir PowerShell betiği çalıştırılırken istenebilir.

Kolaylık takma adları kaldırıldı

PowerShell, Windows'ta kullanıcıya kolaylık sağlamak amacıyla Linux komut adlarıyla eşlenen bir dizi takma ad sağlar. Linux ve macOS'ta, ls, cp, mv, rm temel komutları için "uygun takma adlar", Yerel yürütülebilir dosyanın bir yol belirtmeden çalışmasına izin vermek için cat, man, mount ve ps kaldırıldı.

Günlüğe kaydetme

MacOS'ta PowerShell, Apple'ın birleşik günlük kaydı sisteminde oturum açmak için yerel os_log API'lerini kullanır. Linux'ta PowerShell, her yerde bulunan bir günlük kaydı çözümü olan Syslog'u kullanır.

İş Kontrolü

Linux veya macOS'ta PowerShell'de Unix tarzı iş kontrolü desteği yoktur. fg ve bg komutları mevcut değil. Ancak tüm platformlarda çalışan PowerShell işlerini kullanabilirsiniz.

Bir işlem hattının sonuna & koymak, işlem hattının bir PowerShell işi olarak çalıştırılmasına neden olur. Bir işlem hattı arka planda olduğunda bir iş nesnesi döndürülür. İşlem hattı bir iş olarak çalışmaya başladıktan sonra, işi yönetmek için tüm *-Job cmdlet'leri kullanılabilir. İşlem hattında kullanılan değişkenler (sürece özel değişkenler göz ardı edilerek) otomatik olarak işe kopyalanır, böylece Copy-Item $foo $bar & çalışır. İş, kullanıcının ana dizini yerine geçerli dizinde çalışır.

Uzaktan Destek

Unix platformlarında WinRM kullanan PowerShell Remoting (PSRP), HTTPS üzerinden NTLM/Anlaşma 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şimi (PSRP) destekler. Daha fazla bilgi için bkz. PowerShell'de SSH uzaktan iletişimi.

Sadece Yeterince Yönetim (JEA) Desteği

Linux veya macOS'ta PowerShell, kısıtlı yönetim (JEA) uzaktan uç noktaları oluşturmanıza izin vermez.

sudo, exec ve PowerShell

PowerShell çoğu komutu bellekte çalıştırdığından (Python veya Ruby gibi), sudo'yu doğrudan PowerShell yerleşikleriyle kullanamazsınız. pwsh'yi sudo'dan çalıştırabilirsiniz. PowerShell içinden sudo ile bir PowerShell cmdlet'i çalıştırmak gerekiyorsa, örneğin sudo Set-Date 8/18/2016, o zaman sudo pwsh kullanırsınız Tarih Belirleme 18.08.2016.

Windows dışı platformlarda bulunan modüller

Windows dışı 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
  • PackageManagement
  • PowerShellGet
  • PSReadLine
  • ThreadJob

PowerShell'de yaygın olarak bulunan komutların (cmdlet'lerin) büyük bir kısmı Linux veya macOS'ta mevcut değildir. Çoğu zaman bu komutlar bu platformlar için geçerli değildir. Örneğin, kayıt defteri veya hizmetler gibi Windows'a özgü özelliklere yönelik komutlar mevcut değildir. Set-ExecutionPolicy gibi diğer komutlar mevcuttur 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 sürüm geçmişi.

Modüller artık PowerShell ile birlikte gönderilmiyor

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

  • İMKB
  • Microsoft.PowerShell.LocalAccounts
  • Microsoft.PowerShell.ODataUtils
  • Microsoft.PowerShell.Operation.Validation
  • PSZamanlanmışİş
  • PSİş Akışı
  • PSWorkflowYardımcı Programı

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

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

Cmdlet'ler Windows dışı platformlarda kullanılamaz

Bazı cmdlet'ler PowerShell'den kaldırıldı. Diğerleri mevcut değildir veya Windows dışı platformlarda farklı şekilde çalışabilir. PowerShell'den kaldırılan cmdlet'lerin kapsamlı bir listesi için bkz. PowerShell'den kaldırılan cmdlet'ler.

Microsoft.PowerShell.Core

Aşağıdaki cmdlet'ler Linux veya macOS'ta 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'in ShowWindow parametresi Windows dışındaki platformlarda kullanılamaz. PowerShell 7.3, Linux ve macOS için Switch-Process cmdlet'ini ve exec işlevini ekledi. Bu komutlar Windows'ta mevcut değildir.

Microsoft.PowerShell.Güvenlik cmdlet'leri

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

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

Bu cmdlet'ler yalnızca PowerShell 7.1'den itibaren kullanılabilir.

    Get-CmsMessage
    Protect-CmsMessage
    Unprotect-CmsMessage

Microsoft.PowerShell.Management cmdlet'leri

Aşağıdaki cmdlet'ler Linux ve macOS'ta 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+ sürümünde mevcuttur
  • Set-Clipboard - PowerShell 7.0+ sürümünde mevcuttur
  • Bilgisayarı Yeniden Başlat - PowerShell 7.1+ sürümünde Linux ve macOS için kullanılabilir
  • Bilgisayarı Durdur - PowerShell 7.1+ sürümünde Linux ve macOS için kullanılabilir

Microsoft.PowerShell.Utility cmdlet'leri

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

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

Takma adlar Linux veya macOS'ta kullanılamaz

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

ac

İçerik Ekle

cat

İçerik Al

clear

Clear-Host

compare

Nesneyi Karşılaştır

cp

Öğeyi Kopyala

cpp

Öğe-Özelliğini Kopyala

diff

Nesneyi Karşılaştır

kill

İşlemi Durdur

ls

Get-ChildItem

man

yardım

mount

Yeni PSDrive

mv

Öğeyi Taşı

ps

Get-Process

rm

Öğeyi Kaldır

rmdir

Öğeyi Kaldır

sleep

Uykuya Başlama

sort

Nesneyi Sırala

start

İşlemi Başlat

tee

Tee-Nesne

write

Yazma-Çıktı

Tablo, Windows dışı platformlarda bulunmayan cmdlet'ler için kullanılamayan takma adları içermez.

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

PowerShell 7.2'den itibaren PSDesiredStateConfiguration modülü PowerShell'den kaldırılmıştır ve PowerShell Galerisi'nde yayınlanmıştır. Daha fazla bilgi için PowerShell Ekibi blogundaki duyuruya bakın. Linux'ta DSC'yi kullanma hakkında daha fazla bilgi için bkz. Linux için DSC'yi kullanmaya başlayın. DSC v1.1 ve v2.x, macOS'ta desteklenmez. DSC v3, Windows, Linux ve macOS'ta desteklenir ancak henüz geliştirilme aşamasındadır.

İlgili makaleler