Komut Önceliği hakkında


Kısa açıklama

PowerShell'in hangi komutun çalıştırılacağını nasıl belirlediğini açıklar.

Uzun açıklama

Komut önceliği, bir oturum aynı ada sahip birden fazla komut içerdiğinde PowerShell'in hangi komutun çalıştırılacağını nasıl belirlediğini açıklar. Bir oturumdaki komutlar gizlenebilir veya aynı ada sahip komutlarla değiştirilebilir. Bu makalede, gizli komutların nasıl çalıştırılacağı ve komut adı çakışmalarının nasıl önleneceği gösterilmektedir.

Komut önceliği

Bir PowerShell oturumu aynı ada sahip birden fazla komut içerdiğinde PowerShell, aşağıdaki kuralları kullanarak hangi komutun çalıştırılacağını belirler.

Bir komutun yolunu belirtirseniz PowerShell, komutu yol tarafından belirtilen konumda çalıştırır.

Örneğin, aşağıdaki komut C:\TechDocs dizininde FindDocs.ps1 komut dosyasını çalıştırır:

C:\TechDocs\FindDocs.ps1

Yürütülebilir herhangi bir komutu tam yolunu kullanarak çalıştırabilirsiniz. Bir güvenlik özelliği olarak PowerShell, komut $env:Path ortam değişkeninde listelenen bir yolda bulunmadığı sürece PowerShell betikleri ve yerel komutlar da dahil olmak üzere yürütülebilir komutları çalıştırmaz.

Geçerli dizinde bulunan yürütülebilir bir dosyayı çalıştırmak için tam yolu belirtin veya geçerli dizini temsil etmek üzere .\ göreceli yolunu kullanın.

Örneğin, FindDocs.ps1 dosyasını geçerli dizinde çalıştırmak için şunu yazın:

.\FindDocs.ps1

Bir yol belirtmezseniz PowerShell, komutları çalıştırırken aşağıdaki öncelik sırasını kullanır.

  1. Takma ad
  2. İşlev
  3. Cmdlet (bkz. Cmdlet adı çözümlemesi)
  4. Harici yürütülebilir dosyalar (PowerShell betik dosyaları dahil)

Bu nedenle, help yazarsanız, PowerShell önce help adlı bir takma adı, ardından Help adlı bir işlevi ve son olarak da Yardım. Bulduğu ilk yardım öğesini çalıştırır.

Örneğin, oturumunuz her ikisi de Get-Map adında bir cmdlet ve işlev içeriyorsa, Get-Map yazdığınızda PowerShell işlevi çalıştırır.

Not

Bu yalnızca yüklü komutlar için geçerlidir. Eğer bir build çalıştırılabilir dosyası ve içine yüklenmemiş bir modülün içinde Invoke-Build adlı bir işlev için bir Takma Ad build varsa Geçerli oturumda PowerShell bunun yerine build yürütülebilir dosyasını çalıştırır. Harici yürütülebilir dosyayı bulursa modülleri otomatik olarak yüklemez. Yalnızca hiçbir harici yürütülebilir dosya bulunmadığında verilen ada sahip bir takma ad, işlev veya cmdlet çağrılır.

Aynı adlara sahip öğeleri çözümleme

Bu kurallar sonucunda öğeler aynı isimdeki öğelerle değiştirilebilir veya gizlenebilir.

Öğe adını bir modül adıyla niteleyerek orijinal öğeye hâlâ erişebiliyorsanız öğeler gizlenir veya gölgelenir.

Örneğin, oturumdaki cmdlet'le aynı ada sahip bir işlevi içe aktarırsanız cmdlet gizlenir ancak değiştirilmez. Modül nitelikli adını belirterek cmdlet'i çalıştırabilirsiniz.

Öğeler değiştirildiğinde veya üzerine yazıldığında artık orijinal öğeye erişemezsiniz.

Örneğin, oturumdaki bir değişkenle aynı ada sahip bir değişkeni içe aktarırsanız orijinal değişken değiştirilir. Bir değişkeni modül adıyla nitelendiremezsiniz.

Komut satırında bir işlev oluşturup ardından aynı ada sahip bir işlevi içe aktarırsanız orijinal işlev değiştirilir.

Gizli komutları bulma

Get-Command cmdlet'inin All parametresi, gizlenmiş veya değiştirilmiş olsalar bile, belirtilen addaki tüm komutları alır. PowerShell 3.0'dan itibaren varsayılan olarak Get-Command yalnızca komut adını yazdığınızda çalışan komutları alır.

Aşağıdaki örneklerde, oturum bir Get-Date işlevi ve bir Get-Date cmdlet'i içerir. İlk önce hangi komutun seçileceğini belirlemek için Get-Command'ı kullanabilirsiniz.

Get-Command Get-Date
CommandType     Name                      ModuleName
-----------     ----                      ----------
Function        Get-Date

Kullanılabilir Get-Date komutlarını listelemek için Tümü parametresini kullanır.

Get-Command Get-Date -All
CommandType     Name                 Version    Source
-----------     ----                 -------    ------
Function        Get-Date
Cmdlet          Get-Date             7.0.0.0    Microsoft.PowerShell.Utility
Get-Command where -All
CommandType Name                     Version      Source
----------- ----                     -------      ------
Alias       where -> Where-Object
Application where.exe                10.0.22621.1 C:\Windows\system32\where.exe

Komutu aynı ada sahip olabilecek diğer komutlardan ayıran niteleyici bilgileri ekleyerek belirli komutları çalıştırabilirsiniz. Cmdlet'ler için modül nitelikli adı kullanabilirsiniz. Yürütülebilir dosyalar için dosya uzantısını ekleyebilirsiniz. Örneğin, where'in yürütülebilir sürümünü çalıştırmak için where.exe'yi kullanın.

Modül nitelikli adlar kullanın

Bir cmdlet'in modül nitelikli adını kullanmak, aynı ada sahip bir öğe tarafından gizlenen komutları çalıştırmanıza olanak tanır. Örneğin, Get-Date cmdlet'ini Microsoft.PowerShell.Utility modül adı veya yolu ile nitelendirerek çalıştırabilirsiniz. Modül nitelikli adlar kullandığınızda, $PSModuleAutoLoadingPreference değerine bağlı olarak modül otomatik olarak oturuma aktarılabilir.

Not

Değişkenleri veya takma adları nitelendirmek için modül adlarını kullanamazsınız.

Modül nitelikli adların kullanılması, çalıştırmayı düşündüğünüz komutu çalıştırdığınızdan emin olmanızı sağlar. Bu, dağıtmayı düşündüğünüz komut dosyalarını yazarken cmdlet'leri çağırmak için önerilen yöntemdir.

Aşağıdaki örnek, bir komutun modül adını ekleyerek nasıl nitelendirileceğini göstermektedir.

Bu önemli

Modül nitelemesi, platformdan bağımsız olarak modül adını komut adından ayırmak için ters eğik çizgi karakterini (\) kullanır.

New-Alias -Name "Get-Date" -Value "Get-ChildItem"
Microsoft.PowerShell.Utility\Get-Date
Tuesday, May 16, 2023 1:32:51 PM

MapFunctions modülünden bir Yeni Harita komutunu çalıştırmak için, bu komutun modül nitelikli adını kullanın:

MapFunctions\New-Map

Bir komutun içe aktarıldığı modülü bulmak için komutların ModuleName özelliğini kullanın.

(Get-Command <command-name>).ModuleName

Örneğin, Get-Date cmdlet'inin kaynağını bulmak için şunu yazın:

(Get-Command Get-Date).ModuleName
Microsoft.PowerShell.Utility

Komutun adını modülün yolunu kullanarak nitelendirmek istiyorsanız, yol ayırıcı olarak eğik çizgiyi (/) ve ters eğik çizgi karakterini (\) kullanmanız gerekir. ) komut adından önce. Get-Date cmdlet'ini çalıştırmak için aşağıdaki örneği kullanın:

//localhost/c$/Progra~1/PowerShell/7-preview/Modules/Microsoft.PowerShell.Utility\Get-Date

Yol, tam yol veya geçerli konuma göre olan bir yol olabilir. Windows'ta sürücü nitelikli bir yol kullanamazsınız. Önceki örnekte gösterildiği gibi bir UNC yolu veya geçerli sürücüye göre olan bir yol kullanmanız gerekir. Aşağıdaki örnekte geçerli konumunuzun C: sürücüsünde olduğu varsayılmaktadır.

/Progra~1/PowerShell/7-preview/Modules/Microsoft.PowerShell.Utility\Get-Date

Çağrı operatörünü kullanın

Gizli komutları Get-ChildItem (takma adı dir), Get- çağrısıyla birleştirerek çalıştırmak için çağrı operatörünü (&) de kullanabilirsiniz. Komut veya Get-Module.

Çağrı operatörü, alt kapsamdaki dizeleri ve komut dosyası bloklarını yürütür. Daha fazla bilgi için bkz. about_Operators.

Örneğin, Map adlı bir takma ad tarafından gizlenen Map adlı işlevi çalıştırmak için aşağıdaki komutu kullanın.

& (Get-Command -Name Map -CommandType Function)

veya

& (dir Function:\map)

Çalıştırmayı kolaylaştırmak için gizli komutunuzu bir değişkene de kaydedebilirsiniz.

Örneğin, aşağıdaki komut Map işlevini $myMap değişkenine kaydeder ve ardından onu çalıştırmak için Call operatörünü kullanır.

$myMap = (Get-Command -Name map -CommandType function)
& ($myMap)

Değiştirilen öğeler

Değiştirilen öğe, artık erişemeyeceğiniz öğedir. Bir modülden aynı addaki öğeleri içe aktararak öğeleri değiştirebilirsiniz.

Örneğin, oturumunuzda bir Get-Map işlevi yazarsanız ve Get-Map adlı bir işlevi içe aktarırsanız, bu, orijinal işlevin yerine geçer. Geçerli oturumda bunu geri alamazsınız.

Değişkenler ve takma adlar gizlenemez çünkü bunları çalıştırmak için bir çağrı operatörü veya nitelikli bir ad kullanamazsınız. Bir modülden değişkenleri ve takma adları içe aktardığınızda, bunlar oturumdaki değişkenleri aynı adla değiştirir.

Cmdlet adı çözümlemesi

Bir cmdlet'in nitelenmiş adını kullanmadığınızda PowerShell, cmdlet'in geçerli oturumda yüklenip yüklenmediğini kontrol eder. Aynı cmdlet adını içeren birden fazla modül yüklüyse PowerShell, alfabetik olarak bulunan ilk modüldeki cmdlet'i kullanır.

Cmdlet yüklü değilse PowerShell yüklü modülleri arar ve cmdlet'i içeren ilk modülü otomatik olarak yükler ve bu cmdlet'i çalıştırır. PowerShell, $env:PSModulePath ortam değişkeninde tanımlanan her yoldaki modülleri arar. Yollar değişkende listelendikleri sıraya göre aranır. Her yol içerisinde modüller alfabetik sıraya göre aranır. PowerShell bulduğu ilk eşleşmenin cmdlet'ini kullanır.

İsim çakışmalarından kaçınma

Komut adı çakışmalarını yönetmenin en iyi yolu bunları önlemektir. Komutlarınızı adlandırırken benzersiz bir ad kullanın. Örneğin, komutlarınızdaki isimlere baş harflerinizi veya şirket adınızın kısaltmasını ekleyin.

Komutları bir PowerShell modülünden veya başka bir oturumdan oturumunuza aktardığınızda, adlarındaki isimlere bir önek eklemek için Import-Module veya Import-PSSession cmdlet'inin Prefix parametresini kullanabilirsiniz. komutlar.

Örneğin, aşağıdaki komut, DateFunctions modülünü içe aktardığınızda PowerShell ile birlikte gelen Get-Date ve Set-Date cmdlet'leriyle herhangi bir çakışmayı önler .

Import-Module -Name DateFunctions -Prefix ZZ

Harici yürütülebilir dosyaları çalıştırma

Windows'ta. PowerShell, $env:PATHEXT ortam değişkeninde listelenen dosya uzantılarını yürütülebilir dosyalar olarak ele alır. Windows yürütülebilir dosyaları olmayan dosyalar işlenmek üzere Windows'a aktarılır. Windows dosya ilişkilendirmesini arar ve uzantı için varsayılan Windows Kabuğu fiilini yürütür. Windows'un dosya uzantısına göre yürütmeyi desteklemesi için ilişkinin sisteme kayıtlı olması gerekir.

CMD komut kabuğunun ftype ve assoc komutlarını kullanarak yürütülebilir motoru bir dosya uzantısı için kaydedebilirsiniz. PowerShell'in dosya işleyicisini kaydetmek için doğrudan bir yöntemi yoktur. Daha fazla bilgi için ftype komutunun belgelerine bakın.

PowerShell'in bir dosya uzantısını geçerli oturumda yürütülebilir olarak görmesi için uzantıyı $env:PATHEXT ortam değişkenine eklemeniz gerekir.

Ayrıca bakınız

  • about_Aliases
  • about_Functions
  • about_Path_Sözdizimi
  • Alias-Provider
  • Function-Provider
  • Get-Command
  • Import-Module
  • İçe Aktarma-PSSession

İlgili makaleler