about_Command_Precedence

Kısa açıklama

PowerShell'in hangi komutu çalıştıracakları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 komutu çalıştıracaklarını nasıl belirleyeceğini açıklar. Oturumdaki komutlar gizlenebilir veya aynı ada sahip komutlarla değiştirilebilir. Bu makalede gizli komutları çalıştırma ve komut adı çakışmalarını önleme hakkında bilgi verilmektedir.

Komut önceliği

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

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

Örneğin, aşağıdaki komut dizinde C:\TechDocs FindDocs.ps1 betiğini çalıştırır:

C:\TechDocs\FindDocs.ps1

Herhangi bir yürütülebilir komutu tam yolunu kullanarak çalıştırabilirsiniz. Güvenlik özelliği olarak, komut ortam değişkeninde $env:Path listelenen bir yolda yer almadığı sürece PowerShell, 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 için göreli yolu .\ kullanın.

Örneğin, dosyayı geçerli dizinde çalıştırmak FindDocs.ps1 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. Diğer ad
  2. İşlev
  3. Cmdlet (bkz. Cmdlet ad çözümlemesi)
  4. Dış yürütülebilir dosyalar (PowerShell betik dosyaları dahil)

Bu nedenle, yazarsanız helpPowerShell önce adlı helpdiğer adı, ardından adlı Helpbir işlevi ve son olarak adlı Helpbir cmdlet'i arar. Bulduğu ilk help öğeyi çalıştırır.

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

Not

Bu yalnızca yüklenen komutlar için geçerlidir. Geçerli oturuma yüklenmeyen bir build modülün Invoke-Build içinde adına sahip bir işlev için yürütülebilir dosya ve Diğer Ad build varsa, PowerShell bunun yerine yürütülebilir dosyayı çalıştırırbuild. Dış yürütülebilir dosyayı bulursa modülleri otomatik olarak yüklemez. Yalnızca dış yürütülebilir dosya bulunamadığında verilen ada sahip bir diğer ad, işlev veya cmdlet çağrılır.

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

Bu kuralların bir sonucu olarak, öğeler aynı ada sahip öğeler tarafından değiştirilebilir veya gizlenebilir.

Öğe adını modül adıyla niteleyerek özgün öğeye erişmeye devam ediyorsanız öğeler gizlenir veya gölgelenir.

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

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

Örneğin, oturumdaki bir değişkenle aynı ada sahip bir değişkeni içeri aktarırsanız, özgün değişken değiştirilir. Bir değişkeni modül adıyla niteleyemezsiniz.

Komut satırında bir işlev oluşturur ve ardından aynı ada sahip bir işlevi içeri aktarırsanız, özgün işlev değiştirilir.

Gizli komutları bulma

Get-Command cmdlet'inin All parametresi, gizli veya değiştirilmiş olsalar bile belirtilen ada sahip tüm komutları alır. PowerShell 3.0'da başlayarak, varsayılan olarak yalnızca Get-Command komut adını yazdığınızda çalıştırılan komutları alır.

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

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

Kullanılabilir Get-Date komutları listelemek için All 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 niteleme bilgilerini ekleyerek belirli komutları çalıştırabilirsiniz. Cmdlet'ler için modül nitelikli adını kullanabilirsiniz. Yürütülebilir dosyalar için dosya uzantısını ekleyebilirsiniz. Örneğin, yürütülebilir kullanım sürümünü where çalıştırmak için where.exe.

Modüle uygun adları kullanma

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, cmdlet'i modül adı Microsoft.PowerShell.Utility veya yolu ile niteleyerek çalıştırabilirsinizGet-Date. Modüle uygun adları kullandığınızda, modülü değerine bağlı olarak otomatik olarak oturuma $PSModuleAutoLoadingPreferenceaktarılabilir.

Not

Değişkenleri veya diğer adları nitelemek için modül adlarını kullanamazsınız.

Modül nitelikli adları kullanmak, çalıştırmak istediğiniz komutu çalıştırmanızı sağlar. Bu, dağıtmak istediğiniz betikleri yazarken cmdlet'leri çağırmak için önerilen yöntemdir.

Aşağıdaki örnek, modül adını ekleyerek bir komutun nasıl niteleme yapılacağını gösterir.

Önemli

Modül niteliği, 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

Modülden MapFunctions bir New-Map komut çalıştırmak için modüle uygun adını kullanın:

MapFunctions\New-Map

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

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

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

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

Modülün yolunu kullanarak komutun adını nitemek istiyorsanız, yol ayırıcısı olarak eğik çizgi (/) ve komut adından önce ters eğik çizgi karakterini (\) kullanmanız gerekir. Cmdlet'ini Get-Date ç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 bir yol veya geçerli konuma göre bir yol olabilir. Windows'ta, sürücüye uygun bir yol kullanamazsınız. Önceki örnekte gösterildiği gibi bir UNC yolu veya geçerli sürücüye göre bir yol kullanmanız gerekir. Aşağıdaki örnekte geçerli konumunuzun sürücüde C: olduğu varsayılır.

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

Çağrı işlecini kullanma

Arama işlecini () get-childitem çağrısıyla (&diğer addırdir) Get-Command veya Get-Module çağrısıyla birleştirerek gizli komutları çalıştırmak için de kullanabilirsiniz.

Çağrı işleci, alt kapsamda dizeleri ve betik bloklarını yürütür. Daha fazla bilgi için bkz . about_Operators.

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

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

veya

& (dir Function:\map)

Ayrıca, çalıştırılmasını kolaylaştırmak için gizli komutunuzu bir değişkene kaydedebilirsiniz.

Örneğin, aşağıdaki komut işlevi $myMap değişkene Map kaydeder ve ardından çalıştırmak için işlecini Call kullanır.

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

Değiştirilen öğeler

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

Örneğin, oturumunuza bir Get-Map işlev yazarsanız ve adlı Get-Mapbir işlevi içeri aktarırsanız, özgün işlevin yerini alır. Geçerli oturumda alamazsınız.

Değişkenleri ve diğer adları çalıştırmak için bir çağrı işleci veya nitelenmiş ad kullanamadığınız için gizlenemez. Modüldeki değişkenleri ve diğer adları içeri aktardığınızda, bunlar oturumdaki değişkenleri aynı adla değiştirir.

Cmdlet ad çözümlemesi

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

Cmdlet yüklenmezse PowerShell yüklü modülleri arar ve cmdlet'ini içeren ilk modülü otomatik olarak yükler ve bu cmdlet'i çalıştırır. PowerShell, ortam değişkeninde tanımlanan her bir yoldaki $env:PSModulePath modülleri arar. Yollar, değişkende listelendikleri sırayla aranırlar. Her yol içinde modüller alfabetik sırada aranıyor. PowerShell bulduğu ilk eşleşmeden cmdlet'ini kullanır.

Ad çakışmalarını önleme

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 adlara adınızın baş harflerini veya şirket adı kısaltmanızı ekleyin.

Bir PowerShell modülünden veya başka bir oturumdan oturumunuza komut aktardığınızda, komutların adlarındaki adlara bir ön ek eklemek için Import-Module veya Import-PSSession cmdlet'inin parametresini kullanabilirsinizPrefix.

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

Import-Module -Name DateFunctions -Prefix ZZ

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

Windows'da. PowerShell, ortam değişkeninde $env:PATHEXT listelenen dosya uzantılarını yürütülebilir dosyalar olarak değerlendirir. Windows yürütülebilir dosyası olmayan dosyalar işlenmek üzere Windows'a teslim edilir. Windows dosya ilişkilendirmesini arar ve uzantı için varsayılan Windows Kabuğu fiilini yürütür. Windows'un dosya uzantısıyla yürütmeyi desteklemesi için ilişkilendirmenin sisteme kaydedilmesi gerekir.

CMD komut kabuğunun ve assoc komutlarını kullanarak ftype dosya uzantısı için yürütülebilir altyapıyı 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 geçerli oturumda dosya uzantısını yürütülebilir olarak görmesi için, uzantıyı ortam değişkenine $env:PATHEXT eklemeniz gerekir.

Ayrıca bkz.