Tương đương với cmd'sw, nơi mà trong thế giới quyền lực


61

Tôi dường như không thể tìm thấy bất cứ điều gì về một Powershell tương đương với wherelệnh từ cmd. Tôi chỉ nên gọi nó từ cmdhoặc có một cái gì đó thanh lịch hơn trong PS?


Thú đọc tôi thấy đôi khi trở lại trên Where.exe và Get-ChildItem: blogs.technet.com/b/heyscriptingguy/archive/2010/07/24/...
Shawn Melton

Câu trả lời:


59

Sử dụng Get-Commandlệnh truyền cho nó tên của tệp thực thi. Nó cư trú thuộc tính Path của đối tượng được trả về (kiểu ApplicationInfo ) với đường dẫn được giải quyết đầy đủ đến tệp thực thi.

# ~> (get-command notepad.exe).Path
C:\WINDOWS\system32\notepad.exe

8
Nếu bạn thấy mình sử dụng nó rất nhiều, bạn có thể viết tắt lệnh gcmthay vì gõ toàn bộ Get-Commandtừ mỗi lần
Moshe Katz

@MosheKatz Cảm ơn bạn! gcm notepadđã làm việc hoàn hảo cho tôi khi tôi chỉ muốn xem tập tin nào tôi đang gọi.
Shawn Wang

1
Và đây, chàng trai và cô gái, là cách bạn làm phức tạp quá mức những điều hữu ích đã đúng. Nếu nó không bị hỏng, đừng sửa nó.
AFP_555

Cảm ơn bạn rất nhiều cho lệnh này. Tôi có thể Add-Type mà không cần mã hóa đường dẫn.
Jason TEPOORTEN

22

Nếu bạn chỉ muốn có chức năng tương tự mà không cần gọi cmd, bạn có thể gọi where.exetừ powershell, miễn C:\Windows\System32là trong đường dẫn của bạn. Lệnh where(không có .exe) được đặt bí danh Where-Object, vì vậy chỉ cần chỉ định tên đầy đủ.

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

Đó là khá nhiều những gì mà.exe cũ đã làm ... có chức năng cụ thể hơn mà bạn đang cố gắng bắt chước không?

Chỉnh sửa: Đáp lại bình luận của Joshua ... oh, bạn cũng muốn tìm kiếm các biến môi trường PATH của mình chứ? Không vấn đề gì.

Foreach($_ In $Env:Path -Split ';')
{
    Get-ChildItem $_ -Recurse *.dll
}

1
"ở đâu" cũng tìm kiếm PATH
Joshua McKinnon

3
oh, you want to search your PATH environment variables too? Ừm, vâng, đó là toàn bộ vấn đề where, nếu không bạn chỉ có thể sử dụng dir. Der. :-P
Synetech

3

wherekhông phải là một cmdlệnh được xây dựng . Đây là một ứng dụng độc lập ( where.exe), vì vậy, nói đúng ra PowerShell không "cần một sự thay thế".

Vậy tại sao không wherehoạt động trong PowerShell? Dường như không làm gì cả:

PS C:\> where where
PS C:\>

Theo mặc định, wheređược đặt bí danh cho một lệnh ghép ngắn PS tích hợp.

PS C:\> get-help where

NAME
    Where-Object
...
ALIASES
    where
    ?

Chà, thật tuyệt khi biết, nhưng có cách nào để tránh gọi where-objectkhi cố gọi where.exekhông?

Câu trả lời là có.

lựa chọn 1

Gọi where.exevới phần mở rộng. (Đây là một cách thuận tiện để khắc phục các vấn đề ưu tiên mở rộng tệp và mở rộng tệp khác.)

PS C:\> where.exe where
C:\Windows\System32\where.exe

Tùy chọn 2

Xóa bí danh.

PS C:\> Remove-Item alias:\where -Force
PS C:\> where where
C:\Windows\System32\where.exe

Ghi chú bên

câu trả lời của zdan đề xuất sử dụng Get-Commandnhư là một thay thế. Mặc dù nó dài dòng hơn một chút (ngay cả khi sử dụng gcmbí danh mặc định ), nó có chức năng phong phú hơn where.exe. Nếu được sử dụng trong kịch bản, hãy chú ý đến sự khác biệt tinh tế giữa hai. Ví dụ where.exetrả về tất cả các kết quả khớp, trong khi Get-Commandchỉ trả về kết quả đầu tiên trừ khi bạn bao gồm -TotalCounttham số tùy chọn .

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:\>

Và cuối cùng, nếu bạn xóa wherebí danh mặc định , bạn cũng có thể xem xét việc gán lại đó là bí danh Get-Command. (Nhưng điều này có lẽ sẽ mang lại lợi ích đáng ngờ.)

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:\>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.