Paw*_*wik 6 powershell formatting
执行两个用分号分隔的 PowerShell 命令时,我得到了意想不到的结果。第二个命令的输出发生变化。如果我以相反的顺序运行它们,则看不到第二个命令输出。
在这里,我只是尝试获取时间戳和用户在 AD 中所属的组列表,作为单行。
如果我运行这一行,我会得到以下输出:
Get-ADPrincipalGroupMembership username | Select-Object name
name
----
Domain Users
CL-Inventory-Group
...
Run Code Online (Sandbox Code Playgroud)
但是,如果我运行以下命令,此行为会发生变化:
get-date; Get-ADPrincipalGroupMembership username | Select-Object name
Wednesday, April 3, 2019 2:31:35 PM
name : Domain Users
name : CL-Inventory-Group
...
Run Code Online (Sandbox Code Playgroud)
更奇怪的是,如果我反向运行,这意味着我在第一个命令之后说 get-date,则在列出组后永远不会显示日期戳。
我是否不正确地分隔命令?
tl;博士:
;在提示符下(以交互方式)提交多个分隔的命令仍会将其输出发送到单个管道(您可以将提交的每个命令行视为一个隐式脚本文件)。
简而言之:在您的情况下,第一个命令输出的自动显示格式也决定了第二个命令的显示格式,因此哪个命令先出现很重要:
get-date; Get-ADPrincipalGroupMembership username | Select-Object name
Format-Listfor 之后的所有输出Get-Date,这解释了命令的 each-property-on-its-own 行输出Get-ADPrincipalGroupMembership ...。如果我反向运行,这意味着我在第一个命令之后说 get-date,则在列出组后永远不会显示日期戳。
Select-Objecttype 的输出实例[pscustomobject],由于在这种情况下它们只有 1 个属性,因此锁定在表格显示中,即隐式使用Format-Table,所选属性作为唯一的列,即,就Name在此处。由于[datetime]类型 output byGet-Date没有Name属性,Get-Date的输出实际上是不可见的。继续阅读背景信息和完整规则。
PowerShell 的默认显示格式针对相同类型的对象进行了优化,因为这是典型情况。
如果管道包含多种类型,则默认情况下产生的特定格式取决于:
有关详细信息,请参阅下一节。
您可以使用显式Format-*调用来控制格式;在您的情况下,您可以Format-Table在第二个命令中使用强制表格输出:
Get-Date; Get-ADPrincipalGroupMembership username | Select name | Format-Table
Run Code Online (Sandbox Code Playgroud)
警告:cmdlet的输出Format-*是格式化指令而不是原始数据,这使得此输出不适合进一步的编程处理。
在没有明确的格式化命令的(Format-Table,Format-List,...),PowerShell的自动选择合适的显示格式,基于给定的对象的类型:
Get-Help about_Format.ps1xml).ToString()输出对象的表示。Format-Table; 5个或更多?-> Format-List.注意:Primitive在这里松散地用于指代:
.IsPrimitive返回的类型$true,即[Boolean], [Byte], [SByte], [Int16], [UInt16], [Int32], [UInt32], [Int64], [UInt64], [IntPtr], [UIntPtr], [Char], [Double],[Single][decimal], [bigint],[string]和[securestring]如果管道中的所有对象都属于同一类型,则上述定义适用于所有对象。
相比之下,如果管道中有混合类型,则适用以下逻辑:
原始类型的任何实例总是打印相同的,即作为它们的单个值的表示(而不是作为具有属性的对象),通过调用它们的.ToString()方法获得;例如,12或3.0或hi;原始类型与管道中后续对象的格式无关。
管道中的第一个非原始对象:
本身是根据其预定义的格式说明或上述默认规则(基于属性的数量)打印的。
锁定格式样式 - 列表与表格 - 用于所有剩余的非原始对象:
Format-Tableor Format-List,那么所有剩余的非原始对象也将如此。Format-Custom(例如,在 的情况下Get-Date,通过预定义的格式),它就是Format-List被锁定的。然后所有后续的非原始对象都使用锁定格式样式。
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |