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.
- Diğer ad
- İşlev
- Cmdlet (bkz. Cmdlet ad çözümlemesi)
- Dış yürütülebilir dosyalar (PowerShell betik dosyaları dahil)
Bu nedenle, yazarsanız help
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
. 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 $PSModuleAutoLoadingPreference
aktarı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ı Map
diğ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-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 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.
PowerShell
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin