如何破译文本格式的 Powershell 语法?

tim*_*11g 4 powershell text formatting

我找到了一个我认为可以适应我的目的的 PowerShell 脚本

它包含格式化输出的这一行:

$largeSizefiles = get-ChildItem -path $filesLocation -include $Extension -recurse -ErrorAction "SilentlyContinue" | ? { $_.GetType().Name -eq "FileInfo" } | where-Object {$_.Length -gt $fileSize} | sort-Object -property length  | Select-Object Name, @{Name="Size In KB";Expression={ "{0:N0}" -f ($_.Length / 1KB)}},@{Name="LastWriteTime";Expression={$_.LastWriteTime}},@{Name="Path";Expression={$_.directory}} -first $filesLimit
Run Code Online (Sandbox Code Playgroud)

关键部分似乎是这样的:

Select-Object Name, @{Name="Size In KB";Expression={ "{0:N0}" -f ($_.Length / 1KB)}},@{Name="LastWriteTime";Expression={$_.LastWriteTime}},@{Name="Path";Expression={$_.directory}} -first $filesLimit
Run Code Online (Sandbox Code Playgroud)

我已经阅读了关于 Select-Object 的 ss64.com 教程,但我没有找到任何内容来解释 @{.....} 表单的表达式如何格式化文本。

ss64.com上@操作显示它的格式页@(...),有括号,括号没有。

上面的代码导致以下输出:

Name          : RPI-Image-1-Copy.img
Size In MB    : 29,477
Path          : D:\VirtualDriveShare
LastWriteTime : 8/18/2015 6:27:51 PM
Run Code Online (Sandbox Code Playgroud)

我熟悉多种编程语言,但这对我来说并不明显,而且我还没有在网上找到任何明确的解释。谁能指点我一个好的教程?

Chr*_*wis 7

Select-Object 可以为每个项目使用标题/值的哈希表。在这个例子中:

Select-Object Name, @{Name="Size In KB";Expression={ "{0:N0}" -f ($_.Length / 1KB)}} ...
Run Code Online (Sandbox Code Playgroud)

脚本选择 Name,然后选择从当前管道对象的 Length 参数派生的“以 KB 为单位的名称”。

通过首先将其除以 1024 然后使用 {0:N0} 来显示它来进一步格式化。

Powershell 使用 .Net 字符串格式语法进行显示 - 在这种情况下 {0:N0} 转换为:

// N or n (Number): It represent how many decimal places of zeros to show.
String.Format("{0:N4}", pos);      //”10.0000?
Run Code Online (Sandbox Code Playgroud)

您可能想看看 Kathy Kam 的 Format 101 和 Format 102 文章:

有关字符串格式的更多详细信息。