我想将Json数据传递给Powershell脚本。
PowerShell脚本:
Get-AzMySqlFirewallRule -资源群组名称“dev”-服务器名称“dev-DB-Server”|输出文件“file.json”
New-AzMySqlFirewallRule -名称“”-资源组名称“dev”-服务器名称“dev-core”-结束IP地址“”-开始IP地址““
在上面的powershell脚本中,我需要从下面提到的Json文件中获取“”的值。因此,如何在运行时获取Json参数值,所有3个参数都应传递给上面的命令,以便它将创建新的防火墙规则到新的数据库服务器。
此外,当我运行powershell命令(Get-AzMySqlFirewallRule -资源组名称“dev”-服务器名称“dev-DB-Server”|Out-File“file.json”)我正在以下面的格式获取Json文件数据。不确定此格式是否正确,但我需要从pdbr_home,1.2.3.4和www.example.com开始的以下值5.6.7.8,类似地,另外2行数据应传递到此处的powershell命令New-AzMySqlFirewallRule -Name“”-ResourceGroupName“dev”-ServerName“dev-core”-EndIPAddress“”- 通过for循环启动IP地址“".。
文件.Json:
[
{
"EndIPAddress": "1.3.2.2",
"Id": "/subscriptions/abcdefg/resourceGroups/dev/providers/Microsoft.DBforMySQL/servers/db-dev- vm/firewallRules/praveen_Home",
"Name": "praveen_Home",
"StartIPAddress": "4.3.1.2",
"Type": "Microsoft.DBforMySQL/servers/firewallRules"
},
{
"EndIPAddress": "2.4.5.6",
"Id": "/subscriptions/abcdefg/resourceGroups/dev/providers/Microsoft.DBforMySQL/servers/db-dev- vm/firewallRules/pdbr_Home",
"Name": "pdbr_Home",
"StartIPAddress": "3.2.1.2",
"Type": "Microsoft.DBforMySQL/servers/firewallRules"
}
]
下面的命令输出如下。
PS /home/praveen〉获取命令 json
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet ConvertFrom-Json 7.0.0.0 Microsoft.PowerShell.Utility
Cmdlet ConvertTo-Json 7.0.0.0 Microsoft.PowerShell.Utility
Cmdlet Test-Json 7.0.0.0 Microsoft.PowerShell.Utility
Application json_pp 0.0.0.0 /usr/bin/json_pp
Application json_pp 0.0.0.0 /bin/json_pp
错误:
错误:
New-AzMySqlFirewallRule: /home/praveen/dbtest.ps1:21
Line |
21 | … -ServerName "praveen-dev" -EndIPAddress $entry.EndIPAddress -StartI …
| ~~~~~~~~~~~~~~~~~~~
| Cannot bind argument to parameter 'EndIPAddress' because it is an empty string.
最后一个解决方案现在对我很有效:
####################### 正在将防火墙规则从源数据库服务器更新到目标数据库服务器###################
Write-Host -NoNewline "Updating Firewall rules from Soiurce DB server to Target DB server"
Get-AzMySqlFirewallRule -ResourceGroupName $ResourceGroupName -ServerName $SourceDBServerName | Select-Object Name, StartIPaddress, EndIPaddress | Convertto-Json | Out-File "firewallrule.json"
foreach ($frule in (Get-Content firewallrule.json -raw | ConvertFrom-Json)) {
New-AzMySqlFirewallRule -Name $frule.Name -ResourceGroupName $ResourceGroupName -ServerName $TargetDBServerName -EndIPAddress $frule.EndIPAddress -StartIPAddress $frule.StartIPAddress
}
4条答案
按热度按时间2nbm6dog1#
在写入文件. Docs之前使用Convertto-Json:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertto-json?view=powershell-7.2
按要求编辑:
另一个按要求编辑(修复了我的错误-谢谢你@sage pourpre):
x33g5p2x2#
请尝试以下操作:
另一种不同的方法(尽管问题是针对JSON)是将规则存储在变量中。
6uxekuva3#
我能够修复这个解决方案的帮助下,所有上述输入前几天。感谢所有。真的很感谢你的帮助。
将防火墙规则从源数据库服务器更新到目标数据库服务器
yqkkidmi4#
//role-definition.json
把它转换成json对象,因为我需要把它作为powershell参数中的一个参数来传递。
1.已创建powershell参数
$roleDef= @”{“角色名称”:“我的读写角色”,“类型”:“自定义角色”、“可分配作用域”:["/"],“权限”:[{“数据操作”:[“Microsoft.文档数据库/数据库帐户/读取元数据”,“Microsoft.文档数据库/数据库帐户/SQL数据库/容器/项目/",“Microsoft.文档数据库/数据库帐户/SQL数据库/容器/”] }] }“@
1.$jsonObject = $角色定义|转换自Json
但我得到以下错误-无法将字符串解析为JSON:@{角色名称=我的读写角色;类型=自定义角色;可分配作用域=系统.对象[];权限=System.Object[]}错误详细信息:预期值:第1行第1列(字符0)