PowerShell 7 «Where-Object» и его псевдонимы ничего не возвращают

PowerShell 7 «Where-Object» и его псевдонимы ничего не возвращают

Я постараюсь сделать это как можно более лаконично.

Я использую PowerShell 7.2.0 и не могу заставить where-objectкоманду или ее псевдонимы whereработать ?.
Мне нужна та же функциональность, что и с whereкомандой в CMD.

Я пробовал команду и ее псевдонимы, но ни один из них ничего не возвращает. Я подтвердил, что они уже там (не нужно устанавливать псевдонимы) с get-aliasкомандой.

Как я могу это исправить?

решение1

Эквивалент вPowerShellявляетсяПолучить-ChildItem.

Без параметров это эквивалентно dircmd.

PS C:\...\DummyDesktop>gci


    Directory: C:\Users\keith\DummyDesktop


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        10/30/2021   3:51 AM             11 logs.txt
-a----        11/14/2021  11:07 PM           4833 Regex Whitespace Mode.txt
-a----         11/9/2021   4:51 AM           1011 troubleshooting updates.txt
-a----         11/9/2021   2:55 AM            143 Update Error Troubleshooting.url
  • Если путь не указан, используется текущее местоположение.
  • Чтобы включить подкаталоги текущего местоположения или указанного пути, используйте параметр -REcurse( -s).
  • Многие простые поисковые запросы можно выполнить, используя различные параметры Get-ChildItemс литералами и/или подстановочными знаками.
  • Более сложные поиски могут потребовать передачи результатов GetChildItemв Where-Object.
  • Поскольку вам нужен полный путь, вам понадобится FullNameсвойство объекта FileInfo, возвращаемое функцией gci.
PS C:\...\Documents>gci ventra*


    Directory: C:\Users\keith\Documents


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          3/2/2016  12:02 PM             27 Ventra.txt
-a----          4/5/2021  11:13 PM            181 Ventra.zip


PS C:\...\Documents>(gci ventra*).FullName
C:\Users\keith\Documents\Ventra.txt
C:\Users\keith\Documents\Ventra.zip

Приведенные вами примеры будут выглядеть так:

(gci pyton* -Recurse).FullName
  • Выполняется из корня или папки, которая, как известно, является предком местоположенияpython.exe
  • При поиске из корня системного диска вам, скорее всего, понадобится использовать параметр -ErrorAction SilentlyContinue( -ea silent) для подавления Access deniedошибок.

решение2

Следующая функция сработала для меня, получив ту же функциональность, что и whereв cmd:

function which ($command) {
    Get-Command -Name $command -ErrorAction SilentlyContinue | 
        Select-Object -ExpandProperty Path -ErrorAction SilentlyContinue
}

решение3

Вы можете использовать whereутилиту, используемую CMD (например, where.exe python).

Связанный контент