如何检查函数的输出是否被重定向?

时间:2016-06-06 16:48:05

标签: powershell io-redirection

在* nix系统上,我可以轻松检测程序是在tty上运行还是输出是普通流(管道或文件),从而相应地调整输出(例如漂亮的打印或序列化)。如何在PowerShell中做同样的事情?

我希望我的函数能够将结果输出为手动处理的对象(在脚本中执行或通过管道传递到其他命令时),或者在直接从PS提示调用时使用Format-Table -AutoSize之类的函数。 在PS中实现这一目标的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我建议您决定是否对用户使用格式化cmdlet。如果有的话,我会在输出对象中添加default display property set,这样PowerShell默认只显示属性的选择子集(仍然可以通过使用-Property *调用格式cmdlet来显示完整属性集)。

$properties = 'a', 'b', ...   # list of property names
$object = ...                 # your object

$defaultPropertySet = New-Object Management.Automation.PSPropertySet('DefaultDisplayPropertySet', [string[]]$properties)
$standardMembers = [Management.Automation.PSMemberInfo[]]@($defaultPropertySet)
$object | Add-Member -MemberType MemberSet -Name PSStandardMembers -Value $standardMembers

请注意,这需要PowerShell v3或更高版本。