PowerShellのcmdの「どこ」と同等


61

whereからのコマンドに相当するPowershellについては何も見つけられないようですcmd。私はそれを単に呼び出すcmd必要がありますか、またはPSでよりエレガントなものがありますか?


:興味深い読書私はWhere.exeとGet-ChildItemコマンドレットを上いつか戻っていblogs.technet.com/b/heyscriptingguy/archive/2010/07/24/...
ショーン・メルトン

回答:


59

Get-Commandコマンドレットを使用して、実行可能ファイルの名前を渡します。返されたオブジェクト(ApplicationInfo型)のPathプロパティに、実行可能ファイルへの完全に解決されたパスを設定します。

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

8
あなたはこれをたくさん使って自分自身を見つける場合は、としてコマンドを省略することができますgcm全体ではなく、入力のGet-Commandたびに言葉を
モシェ・カッツ

@MosheKatzありがとうございます!gcm notepadどのファイルを呼び出しているのかを確認したいだけの場合、私にとっては完璧に機能しています。
ショーンワン

1
そして、これは、男の子と女の子、あなたがすでに正しいことを過度に複雑にする方法です。破損していない場合は、修正しないでください。
AFP_555

このコマンドをありがとうございます。パスをハードコーディングせずにAdd-Typeを実行できます。
ジェイソンテポールテン

22

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...

8

Get-ChildItem C:\SomeDir -Recurse *.dll

それは、古いwhere.exeが行うこととほぼ同じです...あなたが模倣しようとしているより具体的な機能がありましたか?

編集:ジョシュアのコメントに応答して...ああ、あなたもあなたのPATH環境変数を検索したいですか?問題ない。

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

1
「where」もPATHを検索します
ジョシュアマッキノン

3
oh, you want to search your PATH environment variables too? あの、はい、それはです全体のポイントwhereそれ以外の場合は、あなただけ使用することができ、dir。あれ :-P
Synetech

3

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:\>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.