What difference between ConvertFrom-CSV and ConvertFrom-StringData?

本文对比了PowerShell中ConvertFrom-CSV与ConvertFrom-StringData两个命令的功能。前者用于将CSV格式的数据转换为对象数组,后者则将键值对字符串转换为哈希表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Windows PowerShell中,我们会发现有两个类似的命令如标题所言:ConvertFrom-CSV 与 ConvertFrom-StringData 而从表现呈现的表单看他们的样子是一样的,但到底有何不同呢?

 

先来看看两者各自的命令说明我们在来进行一番比较:

ConvertFrom-StringData

ConvertFrom-StringData cmdlet 将包含一个或多个键-值对的字符串转换为哈希表。由于每个键-值对必须位于一个单独的行上,所以经常使用 here-string 作为输入格式。

可将 ConvertFrom-StringData cmdlet 视为可在脚本或函数的 DATA 节中使用的安全 cmdlet。在 DATA 节中使用时,字符串的内容必须遵循 DATA 节的规则。有关详细信息,请参阅 about_Data_Sections。

 

ConvertFrom-CSV

ConvertFrom-CSV cmdlet 通过 ConvertTo-CSV cmdlet 生成的 CSV 长度可变字符串来创建对象。

可使用 ConvertFrom-CSV cmdlet 的参数来指定列标题行(列标题行确定所获得的对象的属性名称)、指定项目分隔符,或指示 ConvertFrom-CSV 使用当前区域性的列表分隔符作为分隔符。

ConvertFrom-CSV 创建的对象是原始对象的 CSV 版本。CSV 对象的属性值是原始对象的属性值的字符串版本。对象的 CSV 版本不含任何方法。

也可使用 Export-CSV 和 Import-CSV cmdlet 将对象转为 CSV 字符串(或将 CSV 字符串转换为变量)。这些 cmdlet 和 ConvertTo-CSV、ConvertFrom-CSV cmdlet 一样,只是它们是将 CSV 字符串保存在文件中。

接下来让我们进行实际比较,先赋值一段内容给Process变量,内容如下。

PS C:\> $Process=@'
>> "Name","CPU"
>> "notepad","0.9828063"
>> "calc","0.436323"
>> '@
>>

然后将变量传递给ConvertFrom-CSV看下结果:

PS C:\> ConvertFrom-Csv -InputObject $Process

Name                                                        CPU
----                                                        ---
notepad                                                     0.9828063
calc                                                        0.436323


再通过获得类型我们可以发现,ConvertFrom-CSV生成的其实是一个数组。

PS C:\> (ConvertFrom-Csv -InputObject $Process).GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array


 

以同样的形式我们将声明的对象赋值给ConvertFrom-StringData看下结果:

PS C:\> $b=@'
>> Name = Disks.ps1
>> Category = Storage
>> Cost = Free
>> '@
PS C:\> $b|ConvertFrom-StringData

Name                           Value
----                           -----
Cost                           Free
Name                           Disks.ps1
Category                       Storage

 

而ConvertFrom-StringData生成的其实是一个哈希表:

PS C:\> ($b|ConvertFrom-StringData).gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Hashtable                                System.Object




 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值