【发布时间】:2018-07-26 17:51:50
【问题描述】:
我正在开发一个项目,让基于 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"
}'
我尝试了以下网站提到的建议:
How to make a POST request using Powershell if body have a parameter @type
https://hazzy.techanarchy.net/winadmin/windows/windows-powershell-elk-log-wash/
我尝试了双引号和单引号的组合,并使用@{}、@'{,并附加到参数,即“param +=”或“param =+”。没有运气的方法,或者我错过了一些东西。
我能够从转换为 JSON 计数器部分的单个命令中获取详细信息,即
Get-WmiObject -Class Win32_ComputerSystem -Property Name | ConvertTo-Json
但是我很难将这两个不同的信息合并到一个 json 文件中。此外,我很难提取特定信息并填充 json 文件,即
(Get-WmiObject -Class Win32_ComputerSystem -Property Name).Name | ConvertTo-Json
如果我滥用任何术语或未遵循任何发布指南,我深表歉意。如果我违反了任何条件,请告诉我,我将做出必要的更改以遵守这些条件。如果我不清楚或错过任何重要信息,我深表歉意。提前感谢您,非常感谢您的帮助。
【问题讨论】:
-
要在 PowerShell 中获取字符串扩展(插值),请使用
"..."字符串 - 相比之下,'...'字符串被视为 文字。要将"嵌入"...",请使用`"。
标签: json powershell variables