Пробелы в PowerShell на выходе - PullRequest
       23

Пробелы в PowerShell на выходе

0 голосов
/ 16 февраля 2020

Когда я запускаю две команды одна за другой в скрипте, я часто получаю большие пробелы, как вы можете видеть с помощью этих двух команд (я объединил их с помощью ";", так что я могу видеть проблему как одну -линер, это просто Get-Netipaddress, за которым следует gwmi), между которыми они заканчиваются тремя строчками. Иногда мне нужна более компактная информация в моем выводе. Есть ли способ заставить PowerShell прекратить вводить огромные промежутки между выводом?

Get-Netipaddress | where AddressFamily -eq IPv4 | select IPAddress,InterfaceIndex,InterfaceAlias | sort InterfaceIndex ; gwmi win32_logicaldisk | Format-Table DeviceId, VolumeName, @{n="Size(GB)";e={[math]::Round($_.Size/1GB,2)}},@{n="Free(GB)";e={[math]::Round($_.FreeSpace/1GB,2)}}

Ответы [ 2 ]

1 голос
/ 16 февраля 2020

Всегда есть возможность написать функцию форматирования самостоятельно. Возможно, что-то похожее на приведенное ниже:

function Format-TableCompact {
    [CmdletBinding()]  
    Param (
        [parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)] 
        [PsObject]$InputObject,

        [switch]$AppendNewline
    )
    # If the data is sent through the pipeline, use $input to collect is as array
    if ($PSCmdlet.MyInvocation.ExpectingInput) { $InputObject = @($Input) }
    # or use : $InputObject = $Input | ForEach-Object { $_ }

    $result = ($InputObject | Format-Table -AutoSize | Out-String).Trim()
    if($AppendNewline) { $result += [Environment]::NewLine }
    $result
}

Это приведет к выводу объекта в виде таблицы без каких-либо начальных или конечных символов новой строки, так называемое использование

Get-Netipaddress | where AddressFamily -eq IPv4 | select IPAddress,InterfaceIndex,InterfaceAlias | sort InterfaceIndex | Format-TableCompact
gwmi win32_logicaldisk | Format-Table DeviceId, VolumeName, @{n="Size(GB)";e={[math]::Round($_.Size/1GB,2)}},@{n="Free(GB)";e={[math]::Round($_.FreeSpace/1GB,2)}} | Format-TableCompact

, оно ударит обе таблицы непосредственно друг против друга.

В этом случае, однако, я бы предпочел, чтобы между таблицами был хотя бы один пробел новой строки, поэтому я использовал бы ключ -AppendNewline в первой таблице для вывода:

Get-Netipaddress | where AddressFamily -eq IPv4 | select IPAddress,InterfaceIndex,InterfaceAlias | sort InterfaceIndex | Format-TableCompact -AppendNewline
gwmi win32_logicaldisk | Format-Table DeviceId, VolumeName, @{n="Size(GB)";e={[math]::Round($_.Size/1GB,2)}},@{n="Free(GB)";e={[math]::Round($_.FreeSpace/1GB,2)}} | Format-TableCompact
1 голос
/ 16 февраля 2020

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

($(Get-Netipaddress | Where AddressFamily -eq IPv4 | Select IPAddress,InterfaceIndex,InterfaceAlias | Sort InterfaceIndex ; gwmi win32_logicaldisk | Format-Table DeviceId, VolumeName, @{n="Size(GB)";e={[math]::Round($_.Size/1GB,2)}},@{n="Free(GB)";e={[math]::Round($_.FreeSpace/1GB,2)}}) | Out-String) -replace '(?m)^\r?\n'
...