whereKomutun 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?
whereKomutun 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-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
gcmtüm Get-Commandkelimeyi yazmak yerine
gcm notepadsadece 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.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...
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
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:\>