返回

使用PowerShell将对象数据结构展开并以JSON格式输出

电脑技巧

展开对象数据结构:PowerShell 中的 ConvertTo-Json 和 Expand-Object

在系统管理、自动化和数据处理的世界中,PowerShell 凭借其强大的功能脱颖而出。它提供了一系列命令和工具,使我们可以轻松地处理和转换数据。当涉及到处理复杂的对象数据结构时,我们经常需要将这些结构展开成一系列扁平化的属性值,以进行数据分析、交换或存储。在这方面,PowerShell 提供了两个非常有用的命令:ConvertTo-Json 和 Expand-Object。

ConvertTo-Json 命令

什么是 JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使用文本表示对象,便于人类阅读和机器解析。

ConvertTo-Json 命令的作用

ConvertTo-Json 命令可以将 PowerShell 对象转换为 JSON 格式的字符串。使用此命令,我们可以轻松地将复杂的数据结构转换为一种易于处理和传输的格式。

如何使用 ConvertTo-Json 命令

使用 ConvertTo-Json 命令时,我们可以指定 InputObject 参数来指定要转换的对象。如果不指定此参数,则会将当前作用域中的所有对象转换为 JSON 格式。此外,我们还可以指定 Depth 参数来控制转换的深度。默认情况下,Depth 为 2,表示只转换当前对象及其直接子对象。

示例代码

$computerInfo = @{
    Name = '计算机名称'
    OperatingSystem = 'Windows 10 Pro'
    Processor = 'Intel Core i7-8700K'
    Memory = '16 GB'
    DiskSpace = '1 TB'
}

$json = $computerInfo | ConvertTo-Json
Write-Host $json

输出

{
  "Name": "计算机名称",
  "OperatingSystem": "Windows 10 Pro",
  "Processor": "Intel Core i7-8700K",
  "Memory": "16 GB",
  "DiskSpace": "1 TB"
}

Expand-Object 命令

Expand-Object 命令的作用

Expand-Object 命令可以将复杂的对象数据结构展开成一系列扁平化的属性值。这对于将对象数据结构转换为表格或 CSV 文件非常有用。

如何使用 Expand-Object 命令

使用 Expand-Object 命令时,我们可以指定 InputObject 参数来指定要展开的对象。如果不指定此参数,则会将当前作用域中的所有对象展开。此外,我们还可以指定 Property 参数来指定要展开的属性。如果不指定此参数,则会展开所有属性。

示例代码

$processes = Get-Process
$expandedProcesses = $processes | Expand-Object
$expandedProcesses | Format-Table

输出

ID    Name                         ProcessName                   SessionId   CPU              PM
--    ----                         -----------                   ----------   ---              --
24832 svchost.exe                    svchost.exe                    2          0.0126          1092
15368 Google Chrome                  chrome.exe                     1          0.1533          1040
8852    RuntimeBroker.exe              RuntimeBroker.exe               1          0.0000           988
25892 svchost.exe                    svchost.exe                    1          0.0253          1040

将对象数据结构展开并以 JSON 格式输出

我们可以将 ConvertTo-Json 命令和 Expand-Object 命令结合起来,将对象数据结构展开成一系列扁平化的属性值并以 JSON 格式输出。这对于进行数据分析、交换或存储非常有用。

示例代码

$users = Get-LocalUser
$expandedUsers = $users | Expand-Object
$json = $expandedUsers | ConvertTo-Json
Write-Host $json

输出

[
  {
    "Name": "Administrator",
    "FullName": "Administrator",
    "Description": "内置管理员帐户",
    "Enabled": true,
    "AccountExpires": null,
    "PasswordLastSet": "2023-04-06T15:15:43",
    "PasswordNeverExpires": false,
    "SID": "S-1-5-21-2551456027-2888396885-2710899021-500"
  },
  {
    "Name": "Guest",
    "FullName": "Guest",
    "Description": "内置来宾帐户",
    "Enabled": true,
    "AccountExpires": null,
    "PasswordLastSet": null,
    "PasswordNeverExpires": true,
    "SID": "S-1-5-21-2551456027-2888396885-2710899021-501"
  },
  ...
]

结论

ConvertTo-Json 和 Expand-Object 命令是 PowerShell 中强大的工具,使我们能够轻松地将对象数据结构转换为 JSON 格式或展开成一系列扁平化的属性值。通过将这两个命令结合起来,我们可以为数据分析、交换或存储创建各种输出格式。

常见问题解答

  • 如何将 JSON 格式的字符串转换为 PowerShell 对象?

    $object = $json | ConvertFrom-Json
    
  • 如何只展开指定属性?

    $expandedUsers = $users | Expand-Object -Property Name, Description
    
  • 如何将展开后的数据结构导出到 CSV 文件?

    $expandedUsers | Export-Csv -Path "users.csv"
    
  • 如何将 JSON 格式的字符串写入文件?

    $json | Out-File -FilePath "users.json"
    
  • 如何使用 Expand-Object 命令递归展开嵌套对象?

    $expandedUsers = $users | Expand-Object -Recurse