about_Command_Precedence

Kısa açıklama

PowerShell'in çalıştıracak komutu nasıl belirleyeceklerini açıklar.

Uzun açıklama

Komut önceliği, bir oturumda aynı adla birden fazla komut olduğunda Hangi komutun çalıştırıla powerShell tarafından belirlenecek olduğunu açıklar. Bir oturum içindeki komutlar, aynı adla gizlenerek veya komutlarla değiştirilebilir. Bu makalede gizli komutları çalıştırma ve komut adı çakışmalarını önleme ile ilgili bilgi ve bilgi ve bilgilerin nasıl çalıştırılması gerekir?

Komut önceliği

Bir PowerShell oturumunda aynı adı içeren birden fazla komut olduğunda, PowerShell aşağıdaki kuralları kullanarak çalıştıracak komutu belirler.

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

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

C:\TechDocs\FindDocs.ps1

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

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

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

.\FindDocs.ps1

Yürütmede joker karakter kullanma

Komut yürütmede joker karakterler kullanabilirsiniz. Joker karakter kullanma, globlama olarak da bilinir.

PowerShell, değişmez eşleşmeden önce joker karakter eşleşmesi olan bir dosya yürütür.

Örneğin, aşağıdaki dosyalara sahip 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 sahip: $MyInvocation.MyCommand.Path . Bu komut, çağrılan betiğin adını görüntüler.

dosyasını [a1].ps1 çalıştırarak dosya a.ps1 değişmez bir eşleşme olsa bile [a1].ps1 yürütülür.

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

Şimdi dosyayı a.ps1 sildik ve yeniden çalıştırmayı deneyin.

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

Sabit eşleşme, bu joker karakter deseni için tek dosya eşleşmesi [a1].ps1 olduğundan, bu kez çalışan çıktıdan bunu anabilirsiniz.

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

Not

Aramanın göreli bir yol ile sınırlayıcı olması için betik adına yol ön eki ekini ek .\ gerekir. Bu, komut aramalarını ilgili göreli yolda yer alan dosyalarda sınırlar. Bu ön ek olmadan diğer PowerShell söz dizimi çakışır ve dosyanın buluna garanti edilemez.

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

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

Bu nedenle, "help" yazsanız PowerShell önce adlı bir diğer ad, ardından adlı bir işlev ve son olarak adlı help Help bir cmdlet'i Help aramaz. Bulduğu ilk help öğeyi çalıştırır.

Örneğin, oturumunuz bir cmdlet ve her ikisi de adlı bir işlev içeriyorsa, Get-Map siz yazarak Get-Map PowerShell işlevi çalıştırır.

Not

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

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

Örneğin, bir modülden başka bir cmdlet'i içeri aktardısanız, Get-Date yazarak PowerShell içeri aktarılan sürümü yerel sürüm üzerinde Get-Date çalıştırır.

Gizli ve değiştirilmiş öğeler

Bu kuralların sonucu olarak, öğeler aynı adla değiştirilebilir veya öğeler tarafından gizlenir.

Öğe adını bir modül veya ek bileşen adıyla nitelendirerek özgün öğeye erişmeye devam ediyorsanız öğeler "gizlenir" veya "gölgelidir".

Örneğin, oturumda cmdlet ile aynı ada sahip bir işlevi içeri aktardısanız, cmdlet bir ek bileşenden veya modülden içeri aktarılmış olduğundan gizlenir (ancak değiştirilemez).

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

Örneğin, oturumda bir değişkenle aynı adı olan bir değişkeni içeri aktardısanız, özgün değişken değiştirilir ve artık erişilebilir değildir. Bir değişkeni modül adıyla uygun kamazsiniz.

Ayrıca, komut satırına bir işlev yazın ve aynı adla bir işlevi içeri aktarın, özgün işlev değiştirilir ve artık erişilebilir değildir.

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'dan itibaren, varsayılan olarak yalnızca komut Get-Command adını yazarak çalıştıran komutları alır.

Aşağıdaki örneklerde oturum bir işlev Get-Date ve Get-Date cmdlet'ini içerir.

Aşağıdaki komut, Get-Date yazarak çalıştıran komutu Get-Date alır.

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

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

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

Gizli komutları çalıştırma

Belirli komutları, komutu aynı adla aynı olan diğer komutlardan ayıran öğe özellikleri belirterek çalıştırabilirsiniz. Herhangi bir komutu çalıştırmak için bu yöntemi kullanabilirsiniz, ancak özellikle gizli komutları çalıştırmak için yararlıdır.

Tam adlar

Bir cmdlet'in modüle uygun adını kullanmak, aynı ada sahip bir öğe tarafından gizlenen komutları çalıştırmaya olanak sağlar. Örneğin, cmdlet'ini modül Get-Date adı Microsoft.PowerShell.Utility ile uygun olarak çalıştırabilirsiniz.

Dağıtmak için tercih ettiğiniz betikleri yazarken bu tercih edilen yöntemi kullanın. Betiğin çalıştır olduğu oturumda hangi komutların mevcut olabileceğini tahmin etmek mümkün değil.

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 New-Map eklenen bir komutu çalıştırmak için MapFunctions modülünün tam adını kullanın:

MapFunctions\New-Map

Komutun içe aktarılmış olduğu modülü bulmak için komutların ModuleName özelliğini kullanın.

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

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

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

Not

Değişkenleri veya diğer adları uygun kamazsınız.

Çağrı işleci

Ayrıca, Call & get-ChildItem çağrısıyla birleştirerek (diğer adı "dir" olan) veya Get-Module ile gizli komutları çalıştırmak için Get-Command işlecini kullanabilirsiniz.

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

Örneğin, adlı bir diğer ad tarafından gizlenen adlı Map bir işleviniz Map varsa, 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 komutu bir değişkene de kaydedebilirsiniz.

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

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

Değiştirilmiş öğeler

"Değiştirilmiş" öğe artık erişilemeyecek olan öğedir. Bir modülden veya ek bileşenden aynı adı alan öğeleri içeri aktararak öğeleri değiştirebilirsiniz.

Örneğin, oturumda bir işlev yazmanız ve adlı bir işlevi içeri Get-Map Get-Map aktarmanız, özgün işlevin yerini almaktadır. Geçerli oturumda bunu aamazsiniz.

Değişkenler ve diğer adlar, bunları çalıştırmak için bir çağrı işleci veya tam ad kullanamayarak gizlenemez. Bir modülden veya ek bileşenden değişkenleri ve diğer adları içeri aktarınca, bunlar oturumda 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ı adlarken benzersiz bir ad kullanın. Örneğin, komutlarınıza adlar için baş harflerinizi veya şirket adı kısaltmanızı ekleyin.

Ayrıca, komutları bir PowerShell modülünden veya başka bir oturumdan oturuma aktararak Prefix Import-Module parametresini kullanın veya

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

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

Import-Module -Name DateFunctions -Prefix ZZ

Daha fazla bilgi için aşağıdaki Import-Module ve Import-PSSession bilgilerine bakın.

Ayrıca bkz.