Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除powershell输出中的空行。。。通常地_Powershell_Newline - Fatal编程技术网

删除powershell输出中的空行。。。通常地

删除powershell输出中的空行。。。通常地,powershell,newline,Powershell,Newline,我是PS脚本的新手。 我发现,一般来说,PS在其命令的输出中添加了很多换行符。下面我将给出几个示例,说明我发现PS命令中的(默认?)输出有些通用。 我习惯于类似Unix的输出,其中一般化的输出几乎没有这些行(当然,没有什么可以阻止程序员添加它们) 是否有一种可配置的方法来减少这些换行符的数量,以及可能的冗长程度? 我在下面列出了一系列涉及具体案例的SO问题(以及额外问题),但没有一个是针对一般情况的。 我可以逐个命令应用一些答案,但我想问的是,是否存在某种形式的总体设置/配置PS 编辑: 后来我

我是PS脚本的新手。 我发现,一般来说,PS在其命令的输出中添加了很多换行符。下面我将给出几个示例,说明我发现PS命令中的(默认?)输出有些通用。 我习惯于类似Unix的输出,其中一般化的输出几乎没有这些行(当然,没有什么可以阻止程序员添加它们)

是否有一种可配置的方法来减少这些换行符的数量,以及可能的冗长程度?

我在下面列出了一系列涉及具体案例的SO问题(以及额外问题),但没有一个是针对一般情况的。 我可以逐个命令应用一些答案,但我想问的是,是否存在某种形式的总体设置/配置PS

编辑: 后来我发现(略有变化)在苏


示例

这是我通过几个命令看到的

> dir
                                                                                                    ******  EXTRA LINE
                                                                                                    ******  EXTRA LINE
    Directorio: C:\Users\USER1\OneDrive - YPF\Documents\soft-hard-ware\windows\powershell           ******  VERBOSITY LINE
                                                                                                    ******  EXTRA LINE
                                                                                                    ******  EXTRA LINE
Mode                LastWriteTime         Length Name                                               ******  VERBOSITY LINE
----                -------------         ------ ----                                               ******  VERBOSITY LINE
-a----         9/7/2020     17:11           1021 exec_powershell_info.txt
-a----         9/4/2016     08:25            281 first_bytes.ps1
-a----        10/7/2020     07:53           1536 get_current_script_name.ps1
-a----         9/7/2020     11:58             29 hello_world.ps1
-a----         9/4/2016     09:02            344 last_bytes.ps1
-a----        14/4/2016     13:08            975 split.ps1
-a----        10/7/2020     07:54           3108 update-help.txt
                                                                                                    ******  EXTRA LINE
                                                                                                    ******  EXTRA LINE
> Get-Culture
                                                                                                    ******  EXTRA LINE
LCID             Name             DisplayName                                                       ******  VERBOSITY LINE
----             ----             -----------                                                       ******  VERBOSITY LINE
11274            es-AR            Español (Argentina)                                                                  
                                                                                                    ******  EXTRA LINE
                                                                                                    ******  EXTRA LINE
向右滚动,可以看到我的评论。 我已将要删除的行标记为“
EXTRA LINE
”。 我已经标记了“
详细行”
”我想删除的行,但我更愿意“容忍”这些行

作为一个比较点,这就是我在Linux中看到的,我发现它“不那么冗长”


未解决该问题的其他来源列表


  • 您可以定义一个自定义
    输出默认值
    函数
    ,从输出中删除所有空行/空行(仅用于显示):

    您可以将其放在
    $PROFILE
    文件中,以便在以后的所有会话中都可用(使用
    -NoProfile
    调用PowerShell的会话除外)

    所有命令都隐式地将此函数用于主机(控制台)输出,因为
    输出默认值
    是PowerShell在后台调用的一个特殊命令,用于处理主机输出(即,对于既不捕获也不管道化也不重定向的输出)

    因此,一旦定义了函数,只需调用
    Get ChildItem
    (别名为
    dir
    )就可以生成删除所有空/空白的输出

    请注意,捕获/管道化/重定向输出不受影响,这是需要的

    注意事项:如上所述,
    输出默认值
    仅影响主机输出,不影响其他基于格式化系统的
    Out-*
    cmdlet的行为,如果需要,您必须单独重新定义这些cmdlet

    值得注意的是,重新定义的
    输出默认值
    不会影响
    输出文件
    及其有效别名/
    >
    ——有关执行相同空行剥离的自定义
    输出文件
    实现,请参见底部部分


    旁白: PowerShell附带一个默认命令,作为cmdlet实现。 虽然您可以直接调用
    Out Default
    (无论是默认实现还是自定义实现),但没有理由这样做,应该避免这样做-请参阅


    正如所指出的,对于给定的命令,您可以临时使用相同的技术;e、 g:

    Get-ChildItem | Out-String -Stream | Where { $_.Trim().Length -gt 0 }
    
    但是,请注意,与
    Out Default
    方法不同,此技术仅适用于显示,因为您随后输出的是字符串表示,而不是原始对象(如果您要通过管道将
    写入主机
    ,您将完全绕过(成功)输出流)


    自定义
    输出文件
    函数,该函数也会剥离空行/空行,也被
    /
    >
    调用:

    注:

    • 此函数比自定义
      Out Default
      函数更复杂,因为它需要支持与原始cmdlet相同的参数

    • 它将明显比原始的
      /
      /
      /
      >
      慢,并且它不支持常见的
      -Confirm
      -WhatIf
      参数(但是很少与
      Out文件
      一起使用)

    • 如下文所述,该函数是为在PowerShell[Core]v6+中使用而设计的-请参阅源代码中的注释,了解如何(轻松)将其适应Windows PowerShell


    你是否要求所有的读者浏览十个链接,阅读所有关于他们的信息,然后提出一些在所有这些链接中没有提到的建议?要求通用解决方案涵盖所有可能的产出,这是一个不现实的问题。如果您有特定输出的特定问题,我们可以尝试为您提供解决方案。除了基本上重新编程PowerShell,或者编程一个助手应用程序或脚本来获取所有输出,解析它,修改它,然后根据需要输出它之外,您的问题可能是无法回答的。我从未注意到PowerShell中有过多的空行。你能举个例子说明你在哪里看到这个吗?至于详细输出,这取决于您运行的命令(和开关),但PowerShell提供了大量自定义或抑制输出的范围。再一次,你能举一个例子,你有详细的输出,你实际上想看到什么吗?请记住,你在屏幕上看到的不是对象。它是对象的文本表示形式,可以添加和/或删除项目以使显示更具可读性。所以你到底在处理什么问题?是屏幕显示还是实际数据?仅出于显示目的,将所有内容发送到
    Out String
    Trim()
    多余部分<代码>(命令|输出字符串).Trim()
    。但是,我不建议更改对象的输出类型。
    function Out-Default { 
      $Input | Out-String -Stream | Where { $_.Trim().Length -gt 0 } | Write-Host
    }
    
    Get-ChildItem | Out-String -Stream | Where { $_.Trim().Length -gt 0 }
    
    # Note: Supports neither -Confirm nor -WhatIf
    function Out-File {
      [CmdletBinding(DefaultParameterSetName = 'ByPath', HelpUri = 'https://go.microsoft.com/fwlink/?LinkID=2096621')]
      param(
        [Parameter(ParameterSetName = 'ByPath', Mandatory, Position = 0)]
        [Alias('Path')]
        [string] $FilePath,
      
        [Parameter(ParameterSetName = 'ByLiteralPath', Mandatory, ValueFromPipelineByPropertyName)]
        [Alias('PSPath', 'LP')]
        [string]
        $LiteralPath,
      
        [Parameter(Position = 1)]
        # Note: This validation set is for PowerShell *Core* (v6+).
        # For Windows PowerShell support, comment out the the next line and uncomment the one after.
        [ValidateSet('ascii','bigendianutf32','unicode','utf8','utf8NoBOM','bigendianunicode','oem','utf7','utf8BOM','utf32')]
        # [ValidateSet('default', 'ascii','bigendianutf32','unicode','utf8','bigendianunicode','oem','utf7','utf32')]
        [string] $Encoding,
      
        [switch] $Append,
      
        [switch] $Force,
      
        [Alias('NoOverwrite')]
        [switch] $NoClobber,
      
        [ValidateRange(2, 2147483647)]
        [int] $Width,
      
        [switch] $NoNewline,
      
        [Parameter(ValueFromPipeline = $true)]
        [psobject] $InputObject
      )
      
      $null = $PSBoundParameters.Remove('InputObject')
    
      $Input | Out-String -Stream | Where-Object { $_.Trim().Length -gt 0 } | 
        Microsoft.PowerShell.Utility\Out-File @PSBoundParameters
    
    }