Equivalente del "dove" di cmd in PowerShell


Risposte:


59

Utilizzare il Get-Commandcommandlet passandogli il nome dell'eseguibile. Popola la proprietà Path dell'oggetto restituito (di tipo ApplicationInfo ) con il percorso completamente risolto dell'eseguibile.

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

8
Se ti ritrovi a usarlo molto, puoi abbreviare il comando gcminvece di digitare Get-Commandogni volta l'intera parola
Moshe Katz,

@MosheKatz Grazie! gcm notepadha funzionato perfettamente per me quando voglio solo vedere quale file sto chiamando.
Shawn Wang,

1
E questo, ragazzi e ragazze, è come complicate troppo le cose utili che erano già giuste. Se non è rotto, non ripararlo.
AFP_555,

Grazie mille per questo comando Posso aggiungere-tipo senza codificare il percorso.
Jason TEPOORTEN il

22

Se stai solo cercando di avere la stessa funzionalità senza invocare cmd, puoi chiamare where.exeda PowerShell, purché C:\Windows\System32sia nel tuo percorso. Il comando where(senza .exe) è alias Where-Object, quindi basta specificare il nome completo.

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

È praticamente quello che fa il vecchio where.exe ... c'erano funzionalità più specifiche che stai cercando di imitare?

Modifica: in risposta al commento di Joshua ... oh, vuoi cercare anche le variabili di ambiente PATH? Nessun problema.

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

1
"dove" cerca anche il PERCORSO
Joshua McKinnon,

3
oh, you want to search your PATH environment variables too? Uhm, sì, questo è il punto centrale per where, altrimenti si può semplicemente utilizzare dir. Der. :-P
Synetech,

4

wherenon è un cmdcomando integrato . È un'applicazione standalone ( where.exe), quindi in senso stretto PowerShell non "necessita di una sostituzione".

Quindi perché non wherefunziona in PowerShell? Sembra non fare nulla:

PS C:\> where where
PS C:\>

Per impostazione predefinita, whereviene impostato un cmdlet PS incorporato.

PS C:\> get-help where

NAME
    Where-Object
...
ALIASES
    where
    ?

Bene, è bello sapere, ma c'è un modo per evitare di chiamare where-objectquando si tenta di chiamare where.exe?

La risposta è si.

opzione 1

Chiama where.execon estensione. (Questo è un modo pratico per aggirare altri problemi di aliasing e prioritizzazione delle estensioni di file.)

PS C:\> where.exe where
C:\Windows\System32\where.exe

opzione 2

Rimuovi l'alias.

PS C:\> Remove-Item alias:\where -Force
PS C:\> where where
C:\Windows\System32\where.exe

Note laterali

La risposta di zdan propone di usare Get-Commandcome alternativa. Anche se è un po 'più dettagliato (anche quando si utilizza l' gcmalias predefinito ), ha una funzionalità più ricca di where.exe. Se utilizzato negli script, presta attenzione alle sottili differenze tra i due. Ad esempio, where.exerestituisce tutte le corrispondenze, mentre Get-Commandrestituisce solo il primo risultato a meno che non si includa il -TotalCountparametro facoltativo .

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:\>

E infine, se rimuovi l' wherealias predefinito , potresti anche considerare di riassegnarlo come alias Get-Command. (Ma questo probabilmente sarebbe di dubbia utilità.)

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:\>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.