Uisng test-json on an array of json files



我正在尝试使用Powershell 6中的Test-Json Cmdlet验证文件夹中的所有json文件:

[array]$myFiles=Get-ChildItem *.json -Recurse| select -expand fullname
foreach ($filePath in $myFiles)
{
try {
$isValid = Get-Content $filePath -Raw | Test-Json
$working = $true
} catch {
$working = $false
}
if ($working) {
Write-Host "Is working for $filePath"
}
else {
Write-Host "Not working for $filePath"
}
}

如果 json 文件不正确,cmdlet Test-json 将显示引用 .ps1 文件而不是 .json 文件的错误,因此使用"正在工作"或"不工作"以及$filePath。

但是,无论 json 文件是否正确,它都会为所有 json 文件显示"正在工作"。 因此,我需要"正在为"/"不工作"才能正常工作,或者如果我可以让 Test-json 显示错误的 json 文件而不是 .ps1 文件,我会更好。

请帮忙吗?

问题在于使用Test-Json

根据您的代码片段,您假设如果 JSON 格式不正确,它会抛出错误,但事实并非如此。Test-Json生成的错误打印在控制台上,但不会引发异常。

在您的情况下Test-Jsoncmdlet 将只返回TrueFalse值和错误消息将打印在控制台上。

以下是代码的更正版本:

[array]$myFiles=Get-ChildItem *.json -Recurse| select -expand fullname
foreach ($filePath in $myFiles)
{
$isValid = Get-Content $filePath -Raw | Test-Json -ErrorAction SilentlyContinue
if ($isValid) 
{
Write-Host "Is working for $filePath"
}
else 
{
Write-Host "Not working for $filePath"
}
}

访问此处了解有关Test-Json的更多信息,此处-ErrorAction$ErrorActionPreference-ErrorVariable以及此处的操作首选项枚举。

相关内容

最新更新