cra*_*aig 10 powershell serialization expression powershell-2.0
从文件中加载PowerShell哈希表的问题?记录如何将包含PSON格式的哈希表的文件加载到变量中,但是如何将哈希表保存为PSON格式的文件?
哈希表:
@{
"name" = "report 0"
"parameters" = @(
@{"name" = "parameter 0"; "default" = 1; "values"=1,2,3,4},
@{"name" = "parameter 1"; "default" = 'A'; "values" = 'A','B','C'}
)
}
Run Code Online (Sandbox Code Playgroud)
iRo*_*Ron 11
我遇到了同样的问题.
使用ConvertTo-JSON确实是最明显的工作,但在早期版本的PowerShell中,这个Cmdlet不可用,除非你不想用另一种语言交换任何数据,为什么还要说另一种语言(例如JSON)?我发现ConvertTo-PSON Cmdlet可以很好地存储数据,也非常有助于显示,显示和探索对象变量的确切信息,因此结果如下:
$Object = &($Object | ConverTo-Expression)
Run Code Online (Sandbox Code Playgroud)
我昵称(别名)它只是PSON,因为ConvertFrom-PSON cmdlet确实已经以以下形式存在:Invoke-Expression:
Install-Script -Name ConvertTo-Expression
Run Code Online (Sandbox Code Playgroud)
它将我在此处列出的大多数(全部?)本机PowerShell对象类型转换为单个测试对象:
. .\ConvertTo-Expression.ps1
Run Code Online (Sandbox Code Playgroud)
要将对象转换为PSON字符串,您只需提供命令:
ConvertTo-Expression $Craig
@{
'name' = 'report 0'
'parameters' =
@{
'values' =
1,
2,
3,
4
'default' = 1
'name' = 'parameter 0'
},
@{
'values' =
'A',
'B',
'C'
'default' = 'A'
'name' = 'parameter 1'
}
}
Run Code Online (Sandbox Code Playgroud)
此基本示例将对象转换为类似于ConvertTo-JSON cmdlet 的PowerShell字符串,该字符串可以使用本机Invoke-Expression PowerShell cmdlet 再次转换回来.
该的ConvertTo-PSON还具有-strict它通过明确地添加类型名称,这将带来了很大的优势,以JSON格式防止任何类型的投射选项.这种类型转换通常会在转换它们时使用对象类型:
ConvertTo-Expression $Craig -expand 3
@{
'name' = 'report 0'
'parameters' =
@{'values' = 1, 2, 3, 4; 'default' = 1; 'name' = 'parameter 0'},
@{'values' = 'A', 'B', 'C'; 'default' = 'A'; 'name' = 'parameter 1'}
}
Run Code Online (Sandbox Code Playgroud)
要将对象存储在例如文件,注册表,数据库等中,最好使用-Strict选项并定义0层,这将压缩数据(删除所有空格):
ConvertTo-Expression $Craig -expand 3 -Strong
[hashtable]@{
'name' = [string]'report 0'
'parameters' = [array](
[hashtable]@{'values' = [array]([int]1, [int]2, [int]3, [int]4); 'default' = [int]1; 'name' = [string]'parameter 0'},
[hashtable]@{'values' = [array]([string]'A', [string]'B', [string]'C'); 'default' = [string]'A'; 'name' = [string]'parameter 1'}
)
}
Run Code Online (Sandbox Code Playgroud)
layers选项将定义图层级别如何在单独的行上展开.每个图层级别都会获得额外的标签缩进.
-Layers 0一行没有任何空格(压缩模式)
-Layers 1一行格式化空格(默认)
-Layers X多个图层在多行上展开,直到深度达到X级(缩进)
让我们将PSON字符串转换回来并确认结果:
$Object = &($Object | ConverTo-Expression)
Run Code Online (Sandbox Code Playgroud)
这是结果:
Install-Script -Name ConvertTo-Expression
Run Code Online (Sandbox Code Playgroud)
depth选项类似于ConvertTo-JSON命令中的深度选项.默认情况下,深度限制为9个级别.深度为0级别将删除字符串中的双引号,这可能会在您期望字符串的情况下派上用场,但如果不是,则希望收到警报,例如:
. .\ConvertTo-Expression.ps1
Run Code Online (Sandbox Code Playgroud)
PowerShell 2.0除了在运行PowerShell 2.0时ScriptBlock将替换的类型外String,如果您希望使用PowerShell 2.0从更高版本的PowerShell交换数据,则可以使用-Version 2.0选项.
使用Craig原始问题中的哈希表:
ConvertTo-Expression $Craig
@{
'name' = 'report 0'
'parameters' =
@{
'values' =
1,
2,
3,
4
'default' = 1
'name' = 'parameter 0'
},
@{
'values' =
'A',
'B',
'C'
'default' = 'A'
'name' = 'parameter 1'
}
}
Run Code Online (Sandbox Code Playgroud)
写主机(PSON $克雷格) #标准
ConvertTo-Expression $Craig -expand 3
@{
'name' = 'report 0'
'parameters' =
@{'values' = 1, 2, 3, 4; 'default' = 1; 'name' = 'parameter 0'},
@{'values' = 'A', 'B', 'C'; 'default' = 'A'; 'name' = 'parameter 1'}
}
Run Code Online (Sandbox Code Playgroud)
写主机(PSON $ Craig -Layers 0) #压缩
ConvertTo-Expression $Craig -expand 3 -Strong
[hashtable]@{
'name' = [string]'report 0'
'parameters' = [array](
[hashtable]@{'values' = [array]([int]1, [int]2, [int]3, [int]4); 'default' = [int]1; 'name' = [string]'parameter 0'},
[hashtable]@{'values' = [array]([string]'A', [string]'B', [string]'C'); 'default' = [string]'A'; 'name' = [string]'parameter 1'}
)
}
Run Code Online (Sandbox Code Playgroud)
写主机(PSON $ Craig -Layers 3) #3层
$Object = &($Object | ConverTo-Expression)
Run Code Online (Sandbox Code Playgroud)
写主机(PSON $ Craig -Strict -Layers 9) #Strict,9(全部)层
Install-Script -Name ConvertTo-Expression
Run Code Online (Sandbox Code Playgroud)
有关最新的看到:&在PowerShell的画廊.
试试*-CliXmlcmdlet.要保存对象:
@{
"name" = "report 0"
"parameters" = @(
@{"name" = "parameter 0"; "default" = 1; "values"=1,2,3,4},
@{"name" = "parameter 1"; "default" = 'A'; "values" = 'A','B','C'}
)
} | Export-Clixml -Path c:\hash.xml
Run Code Online (Sandbox Code Playgroud)
读回来:
Import-Clixml c:\hash.xml
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8713 次 |
| 最近记录: |