【发布时间】:2022-01-11 03:56:01
【问题描述】:
我有一个声明为(例如)的变量
$dict_object = @{Firstname="A";Lastname="B"}
我想运行另一个命令,例如任何命令,Get-CIMInstance -class win32_BIOS,我想使用 compare-object 将输出与 $dict_object 变量进行比较。问题是 $dict_object 是一个哈希表,而命令输出不是一个哈希表。这只是示例,但有什么方法可以将 Powershell 命令输出转换为哈希表并将其与哈希表变量/对象进行比较。我尝试使用 Convertfrom-stringData 但它没有按预期分配键值对。
例如,这是带有 convertfrom-stringdata 的命令
PS C:\Windows\System32> Get-CimInstance -class win32_bios | ConvertFrom-StringData
Name Value
---- -----
Win32_BIOS: 1.6.0 (Name "1.6.0", SoftwareElementID = "1.6.0", SoftwareElementState = 3, TargetOperatingSystem =…
相对于正常输出
PS C:\Windows\System32> Get-CimInstance -class win32_bios
SMBIOSBIOSVersion : 1.6.0
Manufacturer : Dell Inc.
Name : 1.6.0
SerialNumber : BDM8P93
Version : DELL - 20170001
我希望上面的第一列作为键,第二列作为值,但似乎 ConvertFrom-StringData 不是这样工作的。
我需要将现有变量与 Get-WebconfigurationProperty(IIS 模块)的输出进行比较,如果值不正确,则 else 块将执行 Add-webconfigurationProperty,我已经测试过 Add-webconfigurationProperty 将 HashTable 作为输入
【问题讨论】:
-
为什么要将哈希表与具有可引用属性的对象进行比较?您可以轻松地将哈希表转换为自定义对象,然后将属性与
Compare-Object->$dict_object = [pstcustomobject]@{Firstname="A";Lastname="B"}进行比较 -
不能使用 [pscustomobject] 作为命令的输出,其值在之前创建时未知。
标签: powershell collections hashtable