Есть ли способ переноса результатов командлета Powershell? - PullRequest
10 голосов
/ 29 июня 2009

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

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-member? В качестве альтернативы, есть ли переключатель для get-member, который будет выдавать результаты способом, который не будет переноситься?

Ответы [ 6 ]

18 голосов
/ 29 июня 2009

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

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

PS> $object | get-member MethodWithLongSignature | format-list
4 голосов
/ 03 февраля 2015

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

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 "
    }
}
4 голосов
/ 01 июля 2009

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

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

Get-Process | Get-Member | Format-Wide Definition -Column 1
3 голосов
/ 01 февраля 2016

Опираясь на ответ Лео, я решил сделать 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 показывать некоторую полезную информацию. См. Эту страницу для получения дополнительной информации об определении командлетов конвейера.

1 голос
/ 05 января 2015

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

(get-process -id 3104) .startinfo.EnvironmentVariables | таблица формата -wrap

0 голосов
/ 11 января 2017

В качестве альтернативы вы можете использовать расширение «PowerShell Tools for Visual Studio 2015» для запуска сценариев PowerShell в VS 2015.

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

Это дает вам все функции редактора VS, перенос слов, отладку, интеллектуальный анализ и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...