我有一个非常简单的问题,我相信有人可以很快回答我。
我有一个文本文件 (password.txt),其中包含由 Poweshell 脚本生成的随机字符串,用作 wifi 密码。
我有另一个脚本(change-password.ps1),它可以登录我的路由器并更改密码。我已经设法让这个脚本查看 json 文件 (config.json) 并使用静态密码之一。
这是我的json文件
{ "PSKs": {
"01":"PSKforJanuary123!!",
"02":"PSKforFebruary123!",
"03":"PSKforMarch123!",
"04":"PSKforApril123!",
"05":"PSKforMay123!",
"06":"PSKforJune123!",
"07":"PSKforJuly123!",
"08":"PSKforAugust123!",
"09":"PSKforSeptember123!",
"10":"PSKforOctober123!",
"11":"PSKforNovember123!",
"12":"PSKforDecember123!"
}
}
因此,我如何替换“PSKfor***123!”,而不是使用上面列表中的其中之一?与我的密码.txt 中的文本行?
或者有没有一种方法可以在我的 json 文件中创建这个随机字符串,而无需运行另一个脚本来生成它?
提前致谢!
如何使用文件中存储的密码更新 Json 中的所有属性:
$json = Get-Content path\to\json.txt -Raw | ConvertFrom-Json
$pass = Get-Content path\to\password.txt
$json.PSKs.PSObject.Properties | ForEach-Object { $_.Value = $pass }
$json | ConvertTo-Json | Set-Content path\to\json.txt
如何使用存储在文件中的密码更新 Json 中的单个属性,例如动态更新与当前月份对应的属性:
$json = Get-Content path\to\json.txt -Raw | ConvertFrom-Json
$pass = Get-Content path\to\password.txt
$month = [datetime]::Now.ToString('MM')
# `$json.PSKs.$month` would work too here
$json.PSKs.PSObject.Properties[$month].Value = $pass
$json | ConvertTo-Json | Set-Content path\to\json.txt
如何使用随机生成的密码更新所有属性,为此,您需要弄清楚要使用什么逻辑来生成随机密码。一个非常简单的方法是通过
RandomNumberGenerator.GetString(ReadOnlySpan<Char>, Int32)
Method 但此方法仅适用于 PowerShell 7。
# `$chars` can be whatever you like, this is just an example
$chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%&_-+='.ToCharArray()
$json = Get-Content path\to\json.txt -Raw | ConvertFrom-Json
$json.PSKs.PSObject.Properties | ForEach-Object {
# `20` is for the string length
$_.Value = [System.Security.Cryptography.RandomNumberGenerator]::GetString($chars, 20)
}
$json | ConvertTo-Json | Set-Content path\to\json.txt