where
のcmd
コマンドに相当するPowershellについては何も見つからないようです。 cmd
から呼び出すだけですか、それともPSにはもっとエレガントなものがありますか?
使用 - Get-Command
コマンドレットに実行可能ファイルの名前を渡します。返されたオブジェクト(タイプ ApplicationInfo )のPathプロパティに、実行可能ファイルへの完全に解決されたパスを設定します。
# ~> (get-command notepad.exe).Path
C:\WINDOWS\system32\notepad.exe
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が行うこととほぼ同じです...模倣しようとしているより具体的な機能はありましたか?
編集:ジョシュアのコメントに応じて...おお、PATH環境変数も検索したいですか?問題ない。
Foreach($_ In $Env:Path -Split ';')
{
Get-ChildItem $_ -Recurse *.dll
}
where
は組み込みのcmd
コマンドではありません。これはスタンドアロンアプリケーション(where.exe
)であるため、厳密に言うと、PowerShellを「置き換える必要はありません」。
では、なぜPowerShellでwhere
が機能しないのでしょうか。それは何もしないようです:
PS C:\> where where
PS C:\>
デフォルトでは、where
は組み込みのPSコマンドレットにエイリアスされます。
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:\>