在* nix系统上,我可以轻松检测程序是在tty上运行还是输出是普通流(管道或文件),从而相应地调整输出(例如漂亮的打印或序列化)。如何在PowerShell中做同样的事情?
我希望我的函数能够将结果输出为手动处理的对象(在脚本中执行或通过管道传递到其他命令时),或者在直接从PS提示调用时使用Format-Table -AutoSize
之类的函数。
在PS中实现这一目标的正确方法是什么?
答案 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或更高版本。