where
Komutun Powershell eşdeğeri hakkında hiçbir şey bulamıyorum cmd
. Sadece aramalı mıyım cmd
, yoksa PS'de daha zarif bir şey mi var?
where
Komutun Powershell eşdeğeri hakkında hiçbir şey bulamıyorum cmd
. Sadece aramalı mıyım cmd
, yoksa PS'de daha zarif bir şey mi var?
Yanıtlar:
Kullan Get-Command
o yürütülebilir adını geçirmeden commandlet. Döndürülen nesnenin Path özelliğini ( ApplicationInfo türünde ) yürütülebilir dosyaya tamamen çözümlenmiş bir yolla doldurur .
# ~> (get-command notepad.exe).Path
C:\WINDOWS\system32\notepad.exe
gcm
tüm Get-Command
kelimeyi yazmak yerine
gcm notepad
sadece hangi dosyayı aradığımı görmek istediğimde benim için mükemmel çalışıyor.
Cmd'yi çağırmadan aynı işlevselliğe sahip olmak istiyorsanız, where.exe
yolunuzda olduğu sürece powhell'den çağrı yapabilirsiniz C:\Windows\System32
. Komut where
(.exe olmadan) takma Where-Object
isimlendirilir, bu yüzden tam adı belirtin.
PS C:\Users\alec> where
cmdlet Where-Object at command pipeline position 1
...
PS C:\Users\alec> where.exe
The syntax of this command is:
WHERE [/R dir] [/Q] [/F] [/T] pattern...
Get-ChildItem C:\SomeDir -Recurse *.dll
Bu, eski where.exe'nin yaptığı şeydir ... taklit etmeye çalıştığınız daha özel bir işlevsellik vardı?
Düzenleme: Joshua'nın yorumuna cevap olarak ... oh, PATH ortam değişkenlerinizi de aramak ister misiniz? Sorun değil.
Foreach($_ In $Env:Path -Split ';')
{
Get-ChildItem $_ -Recurse *.dll
}
oh, you want to search your PATH environment variables too?
Um, evet, bütün mesele bu where
, yoksa sadece kullanabilirsiniz dir
. Der. :-P
where
yerleşik bir cmd
komut değil. Bu bağımsız bir uygulamadır ( where.exe
), bu yüzden kesinlikle konuşan PowerShell "değişime ihtiyaç duymaz".
Peki neden where
PowerShell'de çalışmıyor ? Hiçbir şey yapmıyor gibi görünüyor:
PS C:\> where where
PS C:\>
Varsayılan olarak where
, yerleşik bir PS cmdlet'ine başka ad verilir.
PS C:\> get-help where
NAME
Where-Object
...
ALIASES
where
?
Bunu bilmek harika, ama aramaya where-object
çalışırken aramayı engellemenin bir yolu var where.exe
mı?
Cevap Evet.
seçenek 1
where.exe
Eklenti ile arayın . (Bu, diğer takma ad ve dosya uzantısı önceliklendirme sorunları üzerinde çalışmanın kullanışlı bir yoludur.)
PS C:\> where.exe where
C:\Windows\System32\where.exe
seçenek 2
Diğer adı kaldırın.
PS C:\> Remove-Item alias:\where -Force
PS C:\> where where
C:\Windows\System32\where.exe
Yan notları
zdan'ın cevabıGet-Command
alternatif olarak kullanmayı teklif ediyor . Biraz daha ayrıntılı olmasına rağmen (varsayılan gcm
takma adı kullanırken bile ), daha zengin bir işlevselliğe sahiptir where.exe
. Senaryoda kullanılıyorsa, ikisi arasındaki ince farklılıklara dikkat et. Örneğin where.exe
, tüm eşleşmeleri döndürür, oysa Get-Command
isteğe bağlı -TotalCount
parametreyi dahil etmediğiniz sürece yalnızca ilk sonucu döndürür .
PS C:\> where.exe notepad
C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe
PS C:\> (gcm notepad).Path
C:\WINDOWS\system32\notepad.exe
PS C:\> (gcm notepad -TotalCount 5).Path
C:\WINDOWS\system32\notepad.exe
C:\WINDOWS\notepad.exe
PS C:\>
Ve son olarak, varsayılan where
takma adı kaldırırsanız , bunu bir takma ad olarak atamayı da düşünebilirsiniz Get-Command
. (Ama bu muhtemelen şüpheli bir fayda olacaktır.)
PS C:\> Set-Alias where Get-Command
PS C:\> where notepad
CommandType Name Version Source
----------- ---- ------- ------
Application notepad.exe 10.0.15... C:\WINDOWS\system32\notepad.exe
PS C:\> (where notepad).Path
C:\WINDOWS\system32\notepad.exe
PS C:\>