2009-06-29 5 views
8

Простой (возможно, глупый вопрос). Я новичок Powershell и в основном использую его для создания управляемых библиотек, поэтому мне не нужно писать небольшие приложения, когда мне нужно использовать членов из них. Некоторые из этих библиотек старые и имеют методы с длинными, болезненными сигнатурами. Использование Get-Member после инстанцирования с новым-объектом, я часто сталкиваюсь разочаровывающие результаты, как это:Есть ли способ словесных результатов командлета Powershell?

PS> $object | get-member MethodWithLongSignature 

TypeName: SomeLib.SomeObject 

Name      MemberType Definition 
----      ---------- ---------- 
MethodWithLongSignature Method  System.Void MethodWithLongSignature(string param1, int param2, string param3, string param4, stri.... 

Есть ли способ, чтобы обернуть результаты Get-член? Альтернативно, есть ли переключатель для get-member, который будет давать результаты таким образом, который не будет завершен?

ответ

14

Вывод в структурах таблиц автоматически отформатирован в соответствии с шириной экрана, при необходимости сокращая длинные значения в процессе.

Вывести результаты в команду format-list, чтобы получить подробное вертикальное форматирование результатов.

PS> $object | get-member MethodWithLongSignature | format-list 
+0

Это единственное. Благодаря! –

+0

Почему это не работает '$ object | get-childitem env: путь | format-list'? – whytheq

4

Формат-таблица имеет переключатель -Wrap для обертывания последнего столбца. Поскольку последний столбец вывода Get-Member уже довольно большой, это даст читаемые результаты.

Другой вариант Format-Wide (но это не завернуть, поэтому вы ограничены утешать ширину):

Get-Process | Get-Member | Format-Wide Definition -Column 1 
1

Вы также можете попробовать формат стола -wrap, как:

(get-process -id 3104) .startinfo.EnvironmentVariables | Формат стол -wrap

4

Я не мог найти что-то построил, что позволило в слово-обертывание для произвольной ширины, так что я написал один - немного многословным, но здесь это:

function wrapText($text, $width=80) 
{ 
    $words = $text -split "\s+" 
    $col = 0 
    foreach ($word in $words) 
    { 
     $col += $word.Length + 1 
     if ($col -gt $width) 
     { 
      Write-Host "" 
      $col = $word.Length + 1 
     } 
     Write-Host -NoNewline "$word " 
    } 
} 
+0

Я думаю, вы хотели сбросить '$ col' до нуля внутри цикла if, да? –

2

Строительство на ответ Льва я решил сделать командлет word-wrap.

<# 
.SYNOPSIS 
wraps a string or an array of strings at the console width without breaking within a word 
.PARAMETER chunk 
a string or an array of strings 
.EXAMPLE 
word-wrap -chunk $string 
.EXAMPLE 
$string | word-wrap 
#> 
function word-wrap { 
    [CmdletBinding()] 
    Param(
     [parameter(Mandatory=1,ValueFromPipeline=1,ValueFromPipelineByPropertyName=1)] 
     [Object[]]$chunk 
    ) 
    PROCESS { 
     $Lines = @() 
     foreach ($line in $chunk) { 
      $str = '' 
      $counter = 0 
      $line -split '\s+' | %{ 
       $counter += $_.Length + 1 
       if ($counter -gt $Host.UI.RawUI.BufferSize.Width) { 
        $Lines += ,$str.trim() 
        $str = '' 
        $counter = $_.Length + 1 
       } 
       $str = "$str$_ " 
      } 
      $Lines += ,$str.trim() 
     } 
     $Lines 
    } 
} 

Он работает как передача строки или массив строк в качестве аргумента функции, или на трубопроводе. Примеры:

$str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " * 5 

word-wrap $str 
$str | word-wrap 
get-content txtfile.txt | ?{ $_ } | sort | word-wrap 

Комментарий блок метаданных в верхней части функции позволяет get-help word-wrap показать некоторую полезную информацию. See this page для получения дополнительной информации об определении командлетов конвейера.

0

В качестве альтернативы вы можете использовать "PowerShell Инструменты для Visual Studio 2015" расширение для запуска скриптов Powershell в VS 2015.

https://marketplace.visualstudio.com/items?itemName=AdamRDriscoll.PowerShellToolsforVisualStudio2015&showReviewDialog=true

Это дает вам все особенности VS Editor, слово-обертывание, отладка , intellisense и т. д.

Смежные вопросы