where
からのコマンドに相当するPowershellについては何も見つけられないようですcmd
。私はそれを単に呼び出すcmd
必要がありますか、またはPSでよりエレガントなものがありますか?
where
からのコマンドに相当するPowershellについては何も見つけられないようですcmd
。私はそれを単に呼び出すcmd
必要がありますか、または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が行うこととほぼ同じです...あなたが模倣しようとしているより具体的な機能がありましたか?
編集:ジョシュアのコメントに応答して...ああ、あなたもあなたの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コマンドレットのエイリアスです。
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:\>