에서 where
명령에 해당하는 Powershell에 대해 아무것도 찾지 못하는 것 같습니다 cmd
. cmd
PS 에서 전화해야합니까 아니면 PS에 더 우아한 것이 있습니까?
에서 where
명령에 해당하는 Powershell에 대해 아무것도 찾지 못하는 것 같습니다 cmd
. cmd
PS 에서 전화해야합니까 아니면 PS에 더 우아한 것이 있습니까?
답변:
Get-Command
커맨드 렛을 사용하여 실행 파일 이름을 전달하십시오. 반환 된 객체 ( ApplicationInfo 유형 ) 의 Path 속성을 실행 파일에 대한 완전히 확인 된 경로로 채 웁니다 .
# ~> (get-command notepad.exe).Path
C:\WINDOWS\system32\notepad.exe
gcm
전체를 입력하는 대신 명령을 생략 할 수 있습니다.Get-Command
gcm notepad
내가 전화하는 파일을보고 싶을 때 완벽하게 작동했습니다.
cmd를 호출하지 않고 동일한 기능을 원한다면 경로에있는 where.exe
한 powershell에서 전화 할 수 있습니다 C:\Windows\System32
. where
.exe가없는 명령의 별칭은 Where-Object
이므로 전체 이름 만 지정하십시오.
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
이전 where.exe가하는 것과 거의 비슷합니다. 모방하려는 특정 기능이 있습니까?
편집 : Joshua의 의견에 응답하여 ... 아, PATH 환경 변수도 검색하고 싶습니까? 문제 없어요.
Foreach($_ In $Env:Path -Split ';')
{
Get-ChildItem $_ -Recurse *.dll
}
oh, you want to search your PATH environment variables too?
음, 그래, 그게의 전체 지점 에 where
그렇지 않으면 당신은 사용할 수 있습니다 dir
. 데르. :-P
where
내장 cmd
명령 이 아닙니다 . 독립 실행 형 응용 프로그램 ( where.exe
)이므로 엄밀히 말해 PowerShell에는 "대체가 필요하지 않습니다".
그렇다면 where
PowerShell에서 왜 작동하지 않습니까? 아무것도하지 않는 것 같습니다 :
PS C:\> where where
PS C:\>
기본적으로 기본 제공 where
PS cmdlet의 별칭입니다.
PS C:\> get-help where
NAME
Where-Object
...
ALIASES
where
?
알다시피, 전화를 걸 where-object
때 전화를 피하는 방법이 where.exe
있습니까?
대답은 그렇습니다.
옵션 1
where.exe
내선 번호로 전화하십시오 . (이것은 다른 앨리어싱 및 파일 확장자 우선 순위 문제를 해결하는 편리한 방법입니다.)
PS C:\> where.exe where
C:\Windows\System32\where.exe
옵션 2
별명을 제거하십시오.
PS C:\> Remove-Item alias:\where -Force
PS C:\> where where
C:\Windows\System32\where.exe
사이드 노트
zdan의 답변 은 Get-Command
대안으로 사용하도록 제안합니다 . 기본 gcm
별칭을 사용하는 경우에도 조금 더 장황하지만 where.exe
. 스크립팅에 사용되는 경우이 둘의 미묘한 차이점에주의하십시오. 예를 들어 선택적 매개 변수 를 포함하지 않으면 첫 번째 결과 만 반환 where.exe
하는 반면 예를 들어 모든 일치 항목이 Get-Command
반환됩니다 -TotalCount
.
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:\>
마지막으로 기본 where
별칭 을 제거 하면이 별칭을에 별칭으로 다시 할당하는 것도 고려할 수 있습니다 Get-Command
. (그러나 이것은 아마도 모호한 이익이 될 것입니다.)
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:\>