问题描述
运行以下Get-Command Get-ChildItem -Syntax
会得到:
<... empty line here ...>
Get-ChildItem [[-Path] <string[]>] [[-Filter] <string>] [-Include <string[]>] [-Exclude <string[]>] [-Recurse] [-Depth <uint32>] [-Force] [-Name] [-UseTransaction] [-Attributes <FlagsExpression[FileAttributes]>] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>]
<... empty line here ...>
Get-ChildItem [[-Filter] <string>] -LiteralPath <string[]> [-Include <string[]>] [-Exclude <string[]>] [-Recurse] [-Depth <uint32>] [-Force] [-Name] [-UseTransaction] [-Attributes <FlagsExpression[FileAttributes]>] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>]
<... empty line here ...>
但是,这不是我想要的格式,而是希望删除空白行,并为每个语法行添加一个#
前缀(这样,当行换行时,每种语法的位置很清楚定义开始)。这只是一个例子,想要对许多Cmdlet输出进行类似操作,以便能够将输出操作为文本,而在文本的上方,下方或之间没有空行,仅是格式化和紧凑的文本,因此总的来说会很感激如何以这种方式格式化。即
# Get-ChildItem [[-Path] <string[]>] [[-Filter] <string>] [-Include <string[]>] [-Exclude <string[]>] [-Recurse] [-Depth <uint32>] [-Force] [-Name] [-UseTransaction] [-Attributes <FlagsExpression[FileAttributes]>] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>]
# Get-ChildItem [[-Filter] <string>] -LiteralPath <string[]> [-Include <string[]>] [-Exclude <string[]>] [-Recurse] [-Depth <uint32>] [-Force] [-Name] [-UseTransaction] [-Attributes <FlagsExpression[FileAttributes]>] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>]
解决方法
您在这里!
ON
您将受到控制台最大宽度的限制,因此即使它们只有一行,它也会自动换行。如果您想将其粘贴到其他内容中,可以将其插入(Get-Command Get-ChildItem -Syntax) -split '\r\n' |
where {$_} | foreach {"# $_"}
# Get-ChildItem [[-Path] <string[]>] [[-Filter] <string>] [-Include <string[]>] [-Exclude <string[]>] [-Recurse] [-Depth <uint32>] [-Force] [-Name] [-UseTransaction] [-Attributes <FlagsExpression[FileAttributes]>] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>]
# Get-ChildItem [[-Filter] <string>] -LiteralPath <string[]> [-Include <string[]>] [-Exclude <string[]>] [-Recurse] [-Depth <uint32>] [-Force] [-Name] [-UseTransaction] [-Attributes <FlagsExpression[FileAttributes]>] [-Directory] [-File] [-Hidden] [-ReadOnly] [-System] [<CommonParameters>]
。
clip
,
太棒了,谢谢Doug,真的很有用。我还使用了一个小函数来帮助我很好地设置换行符的格式,因此我可以使用您的代码来绕过最大宽度:
(Get-Command Get-ChildItem -Syntax) -split '\r\n' | where {$_} | foreach {"# $_"} | Write-Wrap
Write-Wrap
函数始终将其格式化为控制台的宽度(使用下面的mklment0点以及他指出的基本PROCESS块进行编辑):
function Write-Wrap {
[CmdletBinding()]Param( [parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)] [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
}
}
,
这是我目前的用途。我发现导航模块很尴尬,并希望有一种更好/更快的方式来获得紧凑的概述。我将这些保存在我自己的Custom-Tools.psm1
模块中,它可以帮助我快速查看系统中的内容。
键入mods
,以查看所有已安装的模块及其位置。
键入mods <partial_name>
以查看所有匹配项。例如mods mic
或mods soft
键入mod <module-name>
以查看有关给定模块内容的快速详细信息。
键入mod <module-name> -i | more
以获得该模块内容的所有语法详细信息。
我发现这是询问模块的一种非常快速便捷的方法。希望对某些人有用。
mods
function mods ($search) {
""
":: Complete `$env:PSModulePath string:`n"
$env:PSModulePath
$env:PSModulePath -Split ";" -replace "\\+$","" | sort
""
""
$PathArray = $env:PSModulePath -Split ";" -replace "\\+$","" | sort
""
foreach ($Path in $PathArray) {
if ($Path -ne '') {
$Path = $Path.TrimEnd('\')
echo ":: Modules under '$Path':`n"
# if (Test-Path $Path) {
$temp = (dir "$Path\*$search*" -Directory -EA Silent | Select -ExpandProperty Name) -join "," # mods w* => mods w** which resolves fine
if ($temp -eq "") { "No matches for '$search' exist in this path" }
# } else { "This path is in `$env:PSModulePath but the folder does not exist"}
Write-Wrap $temp
""
}
}
""
}
mod
function mod ($Module,$def,[switch]$ShowModulesHere,[switch]$Info) {
if ($null -eq $Module) { "You must specify a Module to examine. Run 'mods' to see available Modules." ; break }
""
if ([bool](Get-Module $Module -ListAvailable) -eq $true) {
if ([bool](Get-Module $Module) -eq $true) { ":: Module '$Module' is already imported,so all functions are available`n" }
else { ":: Module '$Module' was not imported,running import now ..." ; Import-Module $Module }
}
else { "Could not find Module in available Module folders`n" ; break }
$ModulePath = ((Get-Module $Module | select Path).Path).TrimEnd('\')
$ModuleVer = (Get-Module $Module -ListAvailable | select Version).Version | sls "\d"
":: '$Module' is version $($ModuleVer)`n`n$ModulePath"
$ModuleRoot = Split-Path ((Get-Module $Module | select Path).Path).TrimEnd("\")
$ModulesHere = (dir $Path -Directory | Select -ExpandProperty Name) -join ","
if ($Info) {
""
foreach ($i in (Get-Command -Module $Module).Name) {
$out = $i # Parse the info string from after the "{"
$type = "" ; try { $type = ((gcm $i -EA silent).CommandType); } catch { $deferr = 1 }
$out += " # $type"
$syntax = Get-Command $i -Syntax
$definition = "" ; if ($type -eq "Alias") { $definition = (get-alias $i).Definition }
$syntax = $syntax -replace $definition,""
if ($type -eq "Alias") { $out += " for '$definition'" }
$out
if ($type -eq "Function") { $syntax = $syntax -replace $i,"" }
if ($type -eq "Cmdlet") { $syntax = $syntax -replace $i,"" }
if (!([string]::IsNullOrWhiteSpace($syntax))) {
$syntax -split '\r\n' | where {$_} | foreach { "Syntax => $_" | Write-Wrap }
}
""
}
""
}
else {
""
":: Module functions:"
$out = ""; foreach ($i in (Get-Command -Module $Module).Name) { $out += " $i," } ; "" ; Write-Wrap $out.TrimEnd(",")
""
}
$ModPaths = $env:PSModulePath -Split ";" -replace "\\+$","" | sort
":: Module Paths (`$env:PSModulePath):"
foreach ($i in $ModPaths) { " $i"}
""
":: '$Module' Path:`n`n $ModulePath"
""
foreach ($i in $ModPaths) {
if (!([string]::IsNullOrWhiteSpace($i))) {
if ($ModulePath | sls $i -SimpleMatch) { $ModRoot = $i ; ":: `$env:PSModulePath parent location is:`n`n $i" }
}
}
""
if ($def -ne $null) {
":: Press any key to open '$def' definition:"
pause
""
def $def
""
}
if ($ShowModulesHere -eq $true) {
":: This `$env:PSModulePath root also contains the following Modules:"
""
(dir $ModRoot -Directory | Select -ExpandProperty Name) -join ","
""
}
}