powershell - 运行帮助 和管道输出到 Where-Object 或 Select-Object 返回空行
问题描述
运行命令help firewall | Select-Object Category
。结果是一栏空白Category
。
奇怪的是,空行数表示在help firewall
不调用管道的情况下会产生的行数Select-Object
或者我正在尝试过滤输出help firewall
以仅返回名称以“Get”开头的行。运行help firewall | Where-Object Name -like "Get"
什么也不返回。
为什么这些管道不帮助工作?他们在其他命令上工作得很好。
Powershell 5.1 版并使用默认的 Windows 控制台。
解决方案
用背景信息补充Zilog80 的有用答案:
Get-Command
help
揭示了这help
不仅仅是cmdlet的别名,Get-Help
而是一个(内置)函数(提交$function:help
以查看其定义)。
正如您自己所注意到的:
while
Get-Help
输出具有反映帮助主题元数据的属性的对象([pscsustomobject]
),例如,然后由 PowerShell 的输出格式系统将其呈现为显示文本,Category
该
help
函数返回字符串——代表呈现的帮助主题的文本行流——这是必要的。
Get-Member
您可以通过管道连接到cmdlet ( help firewall | Get-Member
vs. Get-Help firewall | Get-Member
)来观察输出类型的差异
该help
函数的目的是Get-Help
使用交互式分页进行包装,以便在不适合单个控制台(终端)屏幕的冗长帮助主题中方便地导航。
此分页是通过外部程序提供的(默认情况下,more.com
在 Windows 和less
类 Unix 平台上,可通过 配置$env:PAGER
,但仅在PowerShell (Core) 7+中),并且由于 PowerShell 在与外部程序通信时仅“说出文本”,help
必须向它们发送一个字符串流(用于显示的行),它通过.
Out-String
-Stream
笔记:
当外部分页程序发现它们的标准输出流没有连接到控制台(终端)时,它们除了简单地传递输入之外不采取任何行动(在 Unix 术语中,它们的行为类似于
cat
)。假设,
help
函数本身可以确定这个条件,然后(a)不管道到分页程序和(b)按Get-Help
原样中继对象输出。[1]但是,使用 PowerShell 代码从命令内部确定命令的输出目标甚至是不可能的。
[1] 当发现通过定义的自定义寻呼机是PowerShell命令而不是外部程序时,该函数实际上已经采取了此操作。$env:PAGER
推荐阅读
- laravel-5 - 尝试将 Laravel Homestead 连接到 sqlsrv 数据库时出现错误的网关错误
- oauth - 刷新的 OAuth2 令牌具有无效签名 (Azure AD OAuth2)
- javascript - Jquery Hide Show 似乎无法正常工作
- oracle - Oracle:按日期对结果进行排序,子组按相同日期
- php - 分别加入表插入和更新
- c# - 为什么在 CompensatingCollection 上调用 IQueryable 方法会引发 System.NotSupportedException
- python - Python-opencv 从数据类型未知的字节字符串中读取图像(uint8/16)
- javascript - 当 connectNulls 为真时,highstock 图表不画线延续
- javascript - React Router 重定向到错误的页面
- maven-plugin - 我想根据状态改变背景颜色