Cmd'nin powershell içindeki “nerede” ye eşdeğer


Yanıtlar:


59

Kullan Get-Commando 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

8
Kendinizi bu kadar çok kullanıyorsanız, komutu her seferinde gcmtüm Get-Commandkelimeyi yazmak yerine
kısaltabilirsiniz

@MosheKatz Teşekkürler! gcm notepadsadece hangi dosyayı aradığımı görmek istediğimde benim için mükemmel çalışıyor.
Shawn Wang,

1
Ve bu, erkekler ve kızlar, zaten doğru olan faydalı şeyleri nasıl aşırı karmaşık hale getirdiğinizdir. Kırılmazsa, tamir etmeyin.
AFP_555

Bu komut için çok teşekkür ederim. Yolu kodlamadan Add-Type yapabilirim.
Jason TEPOORTEN

22

Cmd'yi çağırmadan aynı işlevselliğe sahip olmak istiyorsanız, where.exeyolunuzda olduğu sürece powhell'den çağrı yapabilirsiniz C:\Windows\System32. Komut where(.exe olmadan) takma Where-Objectisimlendirilir, 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...

8

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
}

1
"nerede" de
Joshua McKinnon

3
oh, you want to search your PATH environment variables too? Um, evet, bütün mesele bu where, yoksa sadece kullanabilirsiniz dir. Der. :-P
Synetech

3

whereyerleşik bir cmdkomut 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 wherePowerShell'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.exemı?

Cevap Evet.

seçenek 1

where.exeEklenti 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 gcmtakma 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-Commandisteğe bağlı -TotalCountparametreyi 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 wheretakma 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:\>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.