当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在 PowerShell 中将字符串转换为对象?

作者:精品下载站 日期:2024-12-14 05:20:21 浏览:12 分类:玩电脑

如何在 PowerShell 中将字符串转换为对象?


最近,一位PowerShell开发人员问我如何在PowerShell中将字符串转换为对象。我用例子解释了不同的方法。在本教程中,我将通过完整的示例向您展示如何在 PowerShell 中将字符串转换为对象。

要使用 ConvertFrom-Csv cmdlet 在 PowerShell 中将字符串转换为对象,您可以将 CSV 格式的数据直接解析为对象。例如,给定一个包含美国各州信息的 CSV 字符串:

$csvString = "State,Capital,Population
California,Sacramento,39538223
Texas,Austin,29145505
Florida,Tallahassee,21538187"

您可以使用以下方法将其转换为对象:

$states = $csvString | ConvertFrom-Csv

这将为 CSV 数据的每一行创建具有 StateCapitalPopulation 属性的对象。

在 PowerShell 中将字符串转换为对象

现在,让我向您展示在 PowerShell 中将字符串转换为对象的不同方法。

方法 1:使用 ConvertFrom-String

PowerShell 中的 ConvertFrom-String cmdlet 用于从字符串内容中提取和解析结构化属性。当字符串数据具有可预测的格式时,此 cmdlet 非常有用。

示例:解析 CSV 数据

假设您有一个 CSV 字符串,其中包含有关美国各州的信息:

$csvString = "State,Capital,Population
California,Sacramento,39538223
Texas,Austin,29145505
Florida,Tallahassee,21538187"

要将字符串转换为对象,可以使用ConvertFrom-Csv:

$csvString = @"
State,Capital,Population
California,Sacramento,39538223
Texas,Austin,29145505
Florida,Tallahassee,21538187
"@

$states = $csvString | ConvertFrom-Csv
$states | ForEach-Object { Write-Output "State: $($_.State), Capital: $($_.Capital), Population: $($_.Population)" }

这将输出:

State: California, Capital: Sacramento, Population: 39538223
State: Texas, Capital: Austin, Population: 29145505
State: Florida, Capital: Tallahassee, Population: 21538187

执行上述 PowerShell 脚本后,您可以在下面的屏幕截图中看到输出:

[玩转系统] 如何在 PowerShell 中将字符串转换为对象?

查看在 PowerShell 中将字符串转换为双精度

方法 2:使用 ConvertTo-Json 和 ConvertFrom-Json

PowerShell 提供了一种使用 ConvertTo-JsonConvertFrom-Json cmdlet 处理 JSON 数据的简单方法。

示例:解析 JSON 数据

假设您有一个 JSON 字符串,其中包含有关美国一些城市的信息:

$jsonString = @'
[
    {"City": "New York", "State": "NY", "Population": 8419000},
    {"City": "Los Angeles", "State": "CA", "Population": 3980400},
    {"City": "Chicago", "State": "IL", "Population": 2716000}
]
'@

您可以使用 ConvertFrom-Json 将此 JSON 字符串转换为对象:

$jsonString = @'
[
    {"City": "New York", "State": "NY", "Population": 8419000},
    {"City": "Los Angeles", "State": "CA", "Population": 3980400},
    {"City": "Chicago", "State": "IL", "Population": 2716000}
]
'@

$cities = $jsonString | ConvertFrom-Json
$cities | ForEach-Object { Write-Output "City: $($_.City), State: $($_.State), Population: $($_.Population)" }

这将输出:

City: New York, State: NY, Population: 8419000
City: Los Angeles, State: CA, Population: 3980400
City: Chicago, State: IL, Population: 2716000

我使用 VS code 执行上述 PowerShell 脚本后,确切的输出如下面的屏幕截图所示。

[玩转系统] 如何在 PowerShell 中将字符串转换为对象?

查看如何在 PowerShell 中将 Base64 字符串转换为字节数组?

方法三:使用自定义解析逻辑

在某些情况下,您可能需要解析不适合 CSV 或 JSON 等常见格式的字符串。对于此类场景,您可以编写自定义解析逻辑。

示例:解析自定义日志条目

假设您有一个日志文件,其中包含以下格式的条目:

2024-08-19 10:00:00 - Event: UserLogin - User: jdoe
2024-08-19 10:05:00 - Event: FileUpload - User: jdoe - File: report.pdf

您可以将这些条目解析为对象,如下所示:

$logEntries = @"
2024-08-19 10:00:00 - Event: UserLogin - User: jdoe
2024-08-19 10:05:00 - Event: FileUpload - User: jdoe - File: report.pdf
"@

$logEntries.Split("`n") | ForEach-Object {
    if ($_ -match '(?<timestamp>.*?) - Event: (?<event>.*?) - User: (?<user>.*?)( - File: (?<file>.*))?$') {
        [PSCustomObject]@{
            Timestamp = $matches.timestamp
            Event     = $matches.event
            User      = $matches.user
            File      = $matches.file
        }
    }
} | ForEach-Object { Write-Output "Timestamp: $_.Timestamp, Event: $_.Event, User: $_.User, File: $_.File" }

这将输出:

Timestamp: 2024-08-19 10:00:00, Event: UserLogin, User: jdoe, File: 
Timestamp: 2024-08-19 10:05:00, Event: FileUpload, User: jdoe, File: report.pdf

阅读在 PowerShell 中将字符串转换为哈希表

方法 4:使用 ConvertFrom-StringData

ConvertFrom-StringData cmdlet 对于将格式化为键值对的字符串转换为 PowerShell 中的哈希表非常有用。

示例:解析配置数据

假设您有一个配置字符串:

$configString = @"
Server=us-west-1.example.com
Port=443
UseSSL=True
"@

您可以使用 ConvertFrom-StringData 将此字符串转换为哈希表:

$configString = @"
Server=us-west-1.example.com
Port=443
UseSSL=True
"@

$config = $configString | ConvertFrom-StringData
$config.GetEnumerator() | ForEach-Object { Write-Output "$($_.Key): $($_.Value)" }

这将输出:

Server: us-west-1.example.com
Port: 443
UseSSL: True

您可以在下面的屏幕截图中看到输出:

[玩转系统] 如何在 PowerShell 中将字符串转换为对象?

结论

在本教程中,我解释了如何使用各种方法将字符串转换为 PowerShell 中的对象,例如:

  • 使用 ConvertFrom-String
  • 使用 ConvertTo-Json 和 ConvertFrom-Json
  • 使用 ConvertFrom-StringData

我希望这对你有帮助。如果您仍有任何疑问,请在下面的评论中告诉我。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯