Как я могу заставить Windows Powershell Get-ItemProperty показывать только то свойство, которое мне нужно? - PullRequest
3 голосов
/ 19 января 2009

При использовании powershell иногда требуется отображать, например, только имя или полное имя файла.
Из того, что я могу собрать, способ сделать это, используя Get-ItemProperty (псевдоним gp) и передавая -n fullname, например

PS C:\Dev> gp . -n fullname

Примечательно, что я хочу использовать это в более длинных скриптах в сочетании с foreach и where и т. Д.

Затем Powershell отображает полное имя, но также отображает кучу других вещей, как показано ниже:

PSPath       : Microsoft.PowerShell.Core\FileSystem::C:\Dev
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\
PSChildName  : Dev
PSDrive      : C
PSProvider   : Microsoft.PowerShell.Core\FileSystem
fullname     : C:\Dev

У меня вопрос, как я могу заставить powershell отображать только то свойство, которое я хочу (полное имя), и не отвлекать внимание от всех остальных вещей. Get-ItemProperty даже правильный способ сделать это?

Обновление:

Если я сделаю это:

ls -r | ?{ $_.fullname -match "foo" }

Это дает мне серию списков, по одному для каждого каталога, показывая все файлы 'foo' в каждом каталоге. То, что я хотел бы сделать, это объединить эти несколько списков в один список, и не показывать Mode, LastWriteTime, Length или любые другие не относящиеся к делу вещи. Если Get-ItemProperty не правильный способ показать эти вещи, то что?

Ответы [ 5 ]

9 голосов
/ 19 января 2009

Есть много способов. Я думаю, что вы искали Get-ChildItem:

PS> get-childitem x.txt | выберите полное имя

    FullName
    --------
    C:\WINDOWS\system32\WindowsPowerShell\v1.0\x.txt


    PS > get-childitem x.txt | select name

    Name
    ----
    x.txt


    PS > get-childitem x.txt | % { $_.fullname }
    C:\WINDOWS\system32\WindowsPowerShell\v1.0\x.txt
    PS >

Вы можете использовать Get-ItemProperty, но я думаю, что это больше для таких вещей, как реестры.

PS > Get-ItemProperty x.txt | select name

Name
----
x.txt

Format-Table, псевдоним ft также полезно знать о ...

PS > gci x.txt | format-table -a fullname,length

FullName                                         Length
--------                                         ------
C:\WINDOWS\system32\WindowsPowerShell\v1.0\x.txt    126

Обычно используемые псевдонимы для Get-ChildItem: ls, dir и gci. Я бы пошел с gci, когда в Риме.

3 голосов
/ 27 февраля 2013

вы можете использовать (в зависимости от того, что именно вам нужно):

(gi c:\temp\file -ea 0).fullname

(gi c:\temp\file -ea 0) | select -ExpandProperty fullname

C: \ Temp \ файл

-ea: не показывать ошибку, если файл не существует

2 голосов
/ 19 января 2009

Просто дополнительный комментарий ... Способ отображения информации на экране PowerShell также можно изменить, внеся изменения в систему расширенного типа (ETS).

Проверьте справку для Update-TypeData.

Этот путь вводит более сложные темы ...

1 голос
/ 19 января 2009

Если вы находитесь в цикле foreach и у вас есть ссылка на интересующий вас объект, попробуйте что-то вроде следующего, чтобы просто отобразить свойство.

foreach ($file in dir)
{
  $file.fullname
}
0 голосов
/ 19 января 2009

Я всегда ограничивал использование Get-ItemProperty для провайдеров навигации, таких как реестр, для получения данных через Get-Item или get-ChildItem. Сравнить

ls hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
gp hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

что вы хотите сделать, это использовать свойства напрямую

ls | ? { $_.FullName -match "whatever"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...