我正在一个项目中,使基于Windows的计算机运行计划的powershell脚本,该脚本将以JSON结构化数据文件的形式发布主机状态。目的是使相同的脚本能够在任何Windows计算机上运行,而不必手动为脚本将放置在每个服务器上的变量值键入主机名,IP地址等。
$hn = hostname
$ip = ipconfig
echo $hn
echo $ip
$params = '{
"host": "$(hn)",
"service": "APP_NAME",
"annotation": "Service is looking dope!",
“ip": "$(ip)"
}'
Invoke-WebRequest -Uri http://yoursite.com:5550/ -Method POST -ContentType "application/json" -Body $params
#Invoke-RestMethod -Uri http://yoursite.com:5550/ -Method POST -ContentType "application/json" -Body $params
我最终得到以下输出的变化(注意主机名和ip变量保持不变):
HOSTNAME1
1.1.1.1
'{
"host": "$(hn)",
"service": "APP_NAME",
"annotation": "Service is looking dope!",
“ip": "$(ip)"
}'
我希望输出如下所示:
HOSTNAME1
1.1.1.1
'{
"host": "HOSTNAME1",
"service": "APP_NAME",
"annotation": "Service is looking dope!",
“ip": "1.1.1.1"
}'
我尝试了以下网站中提到的建议:
我尝试使用双引号和单引号的组合,并使用@ {},@'{,并附加到参数即“param + =”或“param = +”。运气不好的方法,或者我可能错过了一些东西。
我能够从转换为JSON计数器部分的单个命令中获取详细信息,即
Get-WmiObject -Class Win32_ComputerSystem -Property Name | ConvertTo-Json
但是我很难将两个不同的信息结合到一个json文件中。另外,我很难提取特定信息并填充json文件,即
(Get-WmiObject -Class Win32_ComputerSystem -Property Name).Name | ConvertTo-Json
如果我误用了任何术语或未遵循任何发布准则,我深表歉意。如果我违反了任何条件,请告知我,我将进行必要的更改以遵守这些条件。如果我不清楚或错过任何重要信息,我深表歉意。在此先感谢您,我们将不胜感激。
最佳答案
您需要反转JSON字符串中的引号。单撇号内的任何内容都不会解析为包含可计算的内容。或者,也可以使用如下所示的Here-String:
$params = @"
{
"host": "$hn",
"service": "APP_NAME",
"annotation": "Service is looking dope!",
"ip": "$ip"
}
"@
PS :(可能)最好通过Powershell方式
Get-NetIPAddress (params)| Select IPAddress
来获取IP地址。
关于json - 如何将PowerShell动态变量值传递给JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51529457/