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は「置換を必要としません」。
では、なぜwherePowerShellで動作しないのですか?何もしないようです:
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:\>