Komut Önceliği Hakkında

Kısa açıklama

PowerShell'in çalıştırılacak komutu 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ırileceğini nasıl belirlediğini açıklar. Oturum içindeki 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

Bir 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 "C:\TechDocs" dizininde FindDocs.ps1 betiğini çalıştırır:

C:\TechDocs\FindDocs.ps1

Güvenlik özelliği olarak, komut Yol ortam değişkeninde $env:path listelenen bir yolda yer almadığı veya betik dosyasının yolunu belirtmediğiniz sürece PowerShell, PowerShell betikleri de dahil olmak üzere yürütülebilir (yerel) komutları çalıştırmaz.

Geçerli dizinde bulunan bir betiği çalıştırmak için tam yolu belirtin veya geçerli dizini temsil eden bir nokta .\ yazın.

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

.\FindDocs.ps1

Yürütmede joker karakterler kullanma

Komut yürütmede joker karakterler kullanabilirsiniz. Joker karakterlerin kullanılması globing olarak da bilinir.

PowerShell, sabit değer eşleşmesi öncesinde joker karakter eşleşmesi olan bir dosyayı yürütür.

Örneğin, aşağıdaki dosyaları içeren bir dizin düşünün:

Get-ChildItem C:\temp\test


    Directory: C:\temp\test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        5/20/2019   2:29 PM             28 a.ps1
-a----        5/20/2019   2:29 PM             28 [a1].ps1

Her iki betik dosyası da aynı içeriğe sahiptir: $MyInvocation.MyCommand.Path. Bu komut, çağrılan betiğin adını görüntüler.

çalıştırdığınızda [a1].ps1, dosya a.ps1 değişmez değer eşleşmesi olsa bile yürütülür [a1].ps1 .

C:\temp\test\[a1].ps1
C:\temp\test\a.ps1

Şimdi dosyayı silip a.ps1 yeniden çalıştırmayı deneyelim.

Remove-Item C:\temp\test\a.ps1
C:\temp\test\[a1].ps1
C:\temp\test\[a1].ps1

Sabit değer eşleşmesi bu [a1].ps1 joker karakter deseni için tek dosya eşleşmesi olduğundan, bu kez çalışan çıktıdan görebilirsiniz.

PowerShell'in joker karakterleri nasıl kullandığı hakkında daha fazla bilgi için bkz. about_Wildcards.

Not

Aramayı göreli bir yolla .\ sınırlamak için, betik adına yol ön eki uygulamanız gerekir. Bu, ilgili göreli yoldaki dosyalarda komut aramasını sınırlar. Bu ön ek olmadan, diğer PowerShell söz dizimi çakışabilir ve dosyanın bulunacağı konusunda birkaç garanti vardır.

Bir yol belirtmezseniz, PowerShell geçerli oturumda yüklenen tüm öğeler için komutlar çalıştırırken aşağıdaki öncelik sırasını kullanır:

  1. Diğer ad
  2. İşlev
  3. Cmdlet
  4. Dış yürütülebilir dosyalar (programlar ve PowerShell olmayan betikler)

Bu nedenle, "help" yazarsanız PowerShell ö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. Bu durumda dış yürütülebilir dosyayı bulursa modülleri otomatik olarak yüklemez. Yalnızca hiçbir dış yürütülebilir dosya bulunamadığında verilen ada sahip bir diğer ad, işlev veya cmdlet çağrılır ve böylece modülün otomatik yüklenmesi tetikler.

Oturum aynı ada sahip aynı türde öğeler içerdiğinde, PowerShell daha yeni öğeyi çalıştırır.

Örneğin, bir modülden başka bir Get-Date cmdlet içeri aktarırsanız, yazdığınızda Get-DatePowerShell içeri aktarılan sürümü yerel sürüm üzerinde çalıştırır.

Gizli ve değiştirilen öğeler

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

Özgün öğeye erişmeye devam ediyorsanız, örneğin öğe adını bir modül veya ek bileşen adıyla niteleyerek öğeler "gizli" veya "gölgeli" olur.

Örneğin, oturumdaki cmdlet ile aynı ada sahip bir işlevi içeri aktarırsanız, cmdlet bir ek bileşenden veya modülden içeri aktarıldığı için gizlenir (ancak değiştirilmez).

Özgün öğeye artık erişemezseniz öğeler "değiştirilir" veya "üzerine yazılır".

Ö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 ve artık erişilemez. Bir değişkeni modül adıyla niteleyemezsiniz.

Ayrıca, komut satırına bir işlev yazıp aynı ada sahip bir işlevi içeri aktarırsanız, özgün işlev değiştirilir ve artık erişilemez.

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.

Aşağıdaki komut, yazdığınızda Get-DateGet-Dateçalışan komutu alır.

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

Aşağıdaki komut , tümGet-Date komutları almak için All parametresini kullanır.

Get-Command Get-Date -All
CommandType     Name                      ModuleName
-----------     ----                      ----------
Function        Get-Date
Cmdlet          Get-Date                  Microsoft.PowerShell.Utility

Gizli komutları çalıştırma

Komutu aynı ada sahip olabilecek diğer komutlardan ayıran öğe özelliklerini belirterek belirli komutları çalıştırabilirsiniz. Herhangi bir komutu çalıştırmak için bu yöntemi kullanabilirsiniz, ancak özellikle gizli komutları çalıştırmak için kullanışlıdır.

Tam adlar

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 Microsoft.PowerShell.Utility modül adıyla niteleyerek çalıştırabilirsinizGet-Date.

Dağıtmak istediğiniz betikleri yazarken bu tercih edilen yöntemi kullanın. Betiğin çalıştığı oturumda hangi komutların mevcut olabileceğini tahmin edemezsiniz.

New-Alias -Name "Get-Date" -Value "Get-ChildItem"
Microsoft.PowerShell.Utility\Get-Date
Tuesday, September 4, 2018 8:17:25 AM

Modül tarafından MapFunctions eklenen bir New-Map komutu ç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

Not

Değişkenleri veya diğer adları niteleyemezsiniz.

Çağrı işleci

Gizli komutları çalıştırmak için işlecini Call&Get-ChildItem ("dir" diğer adıdır) Get-Command veya Get-Module çağrısıyla birleştirerek 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ı diğer ad Maptarafından gizlenen adlı Map bir işleviniz varsa, 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 değişkenine Map$myMap 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şemeyeceğimiz öğedir. Bir modülden veya ek bileşenden 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 tam ad kullanamayacağınız için gizlenemez. Bir modülden veya ek bileşenden değişkenleri ve diğer adları içeri aktardığınızda, bunlar oturumdaki değişkenleri aynı adla değiştirir.

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.

Ayrıca, bir PowerShell modülünden veya başka bir oturumdan oturumunuza komut aktardığınızda Import-Module parametresini kullanın Prefix veya

Komutların adlarına bir ön ek eklemek için Import-PSSession cmdlet'i.

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

Import-Module -Name DateFunctions -Prefix ZZ

Daha fazla bilgi için aşağıdaki ve Import-PSSession bölümüne bakınImport-Module.

Ayrıca bkz.