Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将powershell变量解析为JSON数组时出现问题_Json_Powershell_Variables - Fatal编程技术网

将powershell变量解析为JSON数组时出现问题

将powershell变量解析为JSON数组时出现问题,json,powershell,variables,Json,Powershell,Variables,我正在使用下面的代码来更改MEraki的预共享密钥,但是,目前我只能静态地进行更改。 我想自动化代码,使PSK成为一个实际的变量 我尝试过使用“或”,但在任何一种情况下,我都无法将变量回调到数组中,我的最终目标是自动执行此脚本,以便我可以运行它并发出砰砰的一声 [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 -bor [System.Net.Security

我正在使用下面的代码来更改MEraki的预共享密钥,但是,目前我只能静态地进行更改。 我想自动化代码,使PSK成为一个实际的变量

我尝试过使用“或”,但在任何一种情况下,我都无法将变量回调到数组中,我的最终目标是自动执行此脚本,以便我可以运行它并发出砰砰的一声

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 -bor [System.Net.SecurityProtocolType]::Tls11

function Get-RandomCharacters($length, $characters) {
$random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length }
$private:ofs=""
return [String]$characters[$random]
}

function Scramble-String([string]$inputString){     
$characterArray = $inputString.ToCharArray()   
$scrambledStringArray = $characterArray | Get-Random -Count $characterArray.Length     
$outputString = -join $scrambledStringArray
return $outputString 
}



$password = Get-RandomCharacters -length 5 -characters 'abcdefghiklmnoprstuvwxyz'
$password += Get-RandomCharacters -length 1 -characters 'ABCDEFGHKLMNOPRSTUVWXYZ'
$password += Get-RandomCharacters -length 1 -characters '1234567890'

$password = Scramble-String $password

$newDailyPassword = $password 

$newDailyPassword

#Meraki API KEY
$api_key = "API_KEY"
#Meraki Network URL
$network_id = "NETWORK_ID"
#Base API URL
$api = @{
"endpoint" = 'https://api.meraki.com/api/v0'
}
#API URL for SSID PSK Change XXX
$api_put = @{
    "endpoint" = 'https://nXXX.meraki.com/api/v0'
}

$header_org = @{
    "X-Cisco-Meraki-API-Key" = $api_key
    "Content-Type" = 'application/json'
}
# PSK = New password
$data = @{
    "psk" = $newDailyPassword   **#----> I'd like this to be the new daily password variable. Is there a way to do this?**
}
#Convert data to Json format
$jbody = ConvertTo-Json -InputObject $data
#URL Network_ID and SSID number
$api.ssid = "/networks/$network_id/ssids/2"
#Combine base api_put URL and $api.ssid
$Merakiuri = $api_put.endpoint + $api.ssid
Invoke-RestMethod -Method Put -Uri $Merakiuri -Headers $header_org -Body $jbody -Verbose
EDIT1:我已经通过应用变量字符串的concatation解决了这个问题,因为我正在通过JSON(单个字符串)解析意外查询

我已经完成了下面的工作

$JsonJoiner = "'"
$passwordx = -join($JsonJoiner,$password, $JSonJoiner)  

$newDailyPassword = $passwordx
现在,每当我解析 $newDailyPassword
正确的值被解析,我能够生成PW。

因此,
'$newDailyPassword'
返回字符串
$newDailyPassword
。当我刚刚调用变量时,我无法提交请求,远程服务器返回400错误。调用rest方法:远程服务器返回错误:(400)错误的请求。我认为这是一个完全无关的问题。可能您生成的JSON毕竟不是API所期望的。我实际上已经设法通过修改变量生成的字符串并将其连接起来来绕过它。$JsonJoiner=“””$passwordx=-join($JsonJoiner,$password,$JsonJoiner)$newDailyPassword=$passwordx非常感谢您的帮助@marszeNow您基本上只是用单引号括起了值。更简单的版本是:
“$newDailyPassword”“
。但是,当转换为JSON时,它将再次以双引号括起。但是,如果API是这样工作的话。。。