Saya pendatang baru di skrip PS. Saya telah menemukan bahwa, secara umum, PS menambahkan banyak baris baru ke output dari perintahnya. Saya memberikan di bawah ini beberapa contoh dari apa yang saya temukan agak digeneralisasikan tentang output (default?) dalam perintah PS. Saya terbiasa dengan keluaran seperti Unix, di mana keluaran yang digeneralisasikan memiliki sedikit atau tidak satupun dari baris-baris ini (tentu saja, tidak ada yang mencegah seorang programmer untuk menambahkannya).

Apakah ada cara yang dapat dikonfigurasi untuk mengurangi jumlah baris baru tersebut, dan mungkin verbositasnya?

Saya telah menyusun di bawah daftar pertanyaan SO (dan tambahan) yang berhubungan dengan kasus-kasus tertentu, tetapi tidak ada yang bertujuan untuk pengaturan umum. Saya dapat menerapkan beberapa jawaban berdasarkan perintah demi perintah, tetapi saya bertanya apakah ada beberapa bentuk pengaturan/konfigurasi PS secara keseluruhan.

EDIT: Kemudian saya menemukan pertanyaan serupa ini (dengan sedikit variasi) di SU.


Contoh

Inilah yang saya lihat dengan beberapa perintah

> 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

Menggulir ke kanan, orang dapat melihat komentar saya. Saya telah menandai "EXTRA LINE" baris yang ingin saya hapus. Saya telah menandai "VERBOSITY LINE" baris yang ingin saya hapus, tetapi yang lebih saya "toleransi".

Sebagai perbandingan, inilah yang saya lihat di Linux, yang menurut saya "kurang bertele-tele".

$ ll
total 12K
drwxrwxr-x  2 santiago santiago 4,0K ago 10  2017 ./
drwxrwxr-x 17 santiago santiago 4,0K may 19 10:28 ../
-rwxrwxr-x  1 santiago santiago  557 ago 10  2017 date2str.rb*

Daftar sumber lain yang tidak membahas masalah

  1. Hapus baris kosong di output PowerShell
  2. Hapus baris kosong keluaran Powershell
  3. Menghapus Garis Kosong Dari Output Powershell
  4. Cara menghapus baris tambahan dari PowerShell keluaran Get-WMIObjectject
  5. Hapus baris kosong dari output?
  6. Hapus Ruang Kosong Dari Output di PowerShell
  7. Hapus Baris Kosong Dari Output Powershell
  8. Menghapus ruang kosong ekstra dari output PowerShell
  9. Hapus baris kosong dari output
  10. https://social.technet.microsoft.com/Forums/en-US/229727f6-fdb6-4d95-b585-bd9af3ee6670/removing-blank-spaces-and-blank-lines-from-output?forum=ITCG
-5
sancho.s ReinstateMonicaCellio 10 Juli 2020, 14:17

1 menjawab

Jawaban Terbaik

Anda dapat menentukan fungsi Out-Default khusus yang menghapus semua baris kosong/kosong dari output (hanya untuk tampilan):

function Out-Default { 
  $Input | Out-String -Stream | Where { $_.Trim().Length -gt 0 } | Write-Host
}

Anda dapat menempatkannya di file $PROFILE agar tersedia di semua sesi mendatang (kecuali sesi di mana PowerShell dipanggil dengan -NoProfile).

Semua perintah secara implisit menggunakan fungsi ini untuk menjadi host (konsol) keluaran, karena Out-Default adalah perintah khusus yang dipanggil PowerShell < em>di belakang layar untuk menangani keluaran to-host (yaitu, untuk keluaran yang tidak ditangkap atau disalurkan atau dialihkan).

Oleh karena itu, setelah fungsi didefinisikan, cukup memanggil Get-ChildItem (yang merupakan alias untuk dir), misalnya, akan menghasilkan output dengan semua kosong/kosong dihapus.

Perhatikan bahwa capturing / piping / redirecting output tidak terpengaruh, seperti yang diinginkan.

Peringatan: Seperti yang dinyatakan, Out-Default hanya memengaruhi keluaran ke-host, tidak juga perilaku cmdlet Out-* berbasis sistem pemformatan lainnya , yang harus Anda definisikan ulang secara terpisah, jika diinginkan.

Khususnya, yang didefinisikan ulang Out-Default tidak memengaruhi Out-File dan alias efektifnya > / >> - lihat < strong>bagian bawah untuk penerapan Out-File khusus yang melakukan pengupasan baris kosong yang sama.


Sebagai tambahan: PowerShell hadir dengan Out-Default default perintah, diimplementasikan sebagai cmdlet. Meskipun Anda dapat memanggil Out-Default secara langsung (baik implementasi default atau kustom), tidak ada alasan untuk melakukannya, dan hal itu harus dihindari - lihat jawaban ini.


Seperti yang ditunjukkan Compo, Anda dapat menggunakan teknik yang sama ad hoc, untuk perintah yang diberikan; misalnya.:

Get-ChildItem | Out-String -Stream | Where { $_.Trim().Length -gt 0 }

Namun, perhatikan bahwa - tidak seperti pendekatan Out-Default - teknik ini cocok hanya untuk tampilan, karena Anda kemudian mengeluarkan representasi string daripada objek asli (dan jika Anda melakukan pipe ke Write-Host, Anda akan melewati aliran output (sukses) sama sekali).


Fungsi Out-File khusus yang juga menghapus baris kosong/kosong dan juga disebut dengan > / >>:

Catatan:

  • Fungsi ini lebih kompleks daripada fungsi Out-Default khusus, karena perlu mendukung parameter yang sama dengan cmdlet asli.

  • Ini akan terasa lebih lambat daripada Out-File / > / >> asli, dan tidak mendukung -Confirm dan -WhatIf parameter (yang jarang digunakan dengan Out-File, namun).

  • Seperti yang tercetak di bawah, fungsi ini dirancang untuk digunakan di PowerShell [Core] v6+ - lihat komentar di kode sumber untuk mengetahui cara (dengan mudah) menyesuaikannya dengan Windows PowerShell.

# 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

}
3
mklement0 11 Juli 2020, 18:57