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:
- Diğer ad
- İşlev
- Cmdlet
- Dış yürütülebilir dosyalar (programlar ve PowerShell olmayan betikler)
Bu nedenle, "help" yazarsanız PowerShell önce adlı help
diğer adı, ardından adlı Help
bir işlevi ve son olarak adlı Help
bir cmdlet'i arar. Bulduğu ilk help
öğeyi çalıştırır.
Örneğin, oturumunuz bir cmdlet ve her ikisi de adlı Get-Map
bir işlev içeriyorsa, yazdığınızda Get-Map
PowerShell 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-Date
PowerShell 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-Date
Get-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 Map
tarafı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-Map
bir 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
.