Power shell脚本在Windows power shell ISE中运行良好,但它在Power shell版本5中完成了

时间:2017-12-31 18:28:43

标签: json shell powershell

我有以下脚本,它在ISE中工作正常。我可以通过ISE执行和调试这个脚本。

    $file = "backup_settings.json";
    class JsonParser
    {
        $json = $null;
        $setting  = $null;
        $validJson = $false;
        $baseAddress = $null;

        JsonParser()
        {

        }

        ParseJson()
        {
            try 
            {
                $this.json = Get-Content -Raw $global:file; 
                $this.setting = ConvertFrom-Json $this.json -ErrorAction Stop;
                $this.validJson = $true;
            } 
            catch 
            {
                $this.validJson = $false;
            }

            if (-Not $this.validJson) 
            {
                Write-Host "Provided text is not a valid JSON string" -foregroundcolor "Red";
                return;
            }


            if($this.setting.baseAddress)
            {
                $this.baseAddress = $this.setting.baseAddress;
                Write-Host $this.baseAddress;
            }
            else
            {
                Write-Host "No valid baseAddress provided setting file" -foregroundcolor "Red";
                return;
            }
        }
    }

    $json = [JsonParser]::new(); 
    $json.ParseJson();  

但是在PowerShell第5版中,结果是: -

  

提供的文本不是有效的JSON字符串

请注意,我在同一目录中有backup_settings.json。可能是什么原因?如何在电源外壳中运行此操作并获得正确的结果?

更新了代码和结果: -

我尝试了以下方法: -

    $file = (Join-Path $PSScriptRoot "backup_settings.json")

    Write-Host $file;

    if([String]::IsNullOrEmpty($file))
    {
        Write-Host "Empty path"  
    }
    else
    {
        Write-Host "file  path: "$file;
    }

    if(Test-Path $file)
    {
        Write-Host "File exist" $file.ToString();
    }
    else
    {
        Write-Host "file not found".
    }
    $json = [JsonParser]::new(); 
    $json.ParseJson();

结果: -

   C:\tools\backup_settings.json
  file  path:  C:\tools\backup_settings.json
  File exist C:\tools\backup_settings.json
  Provided text is not a valid JSON string

1 个答案:

答案 0 :(得分:2)

在PowerShell中运行它时,听起来JSON文件的路径未正确解析。添加以下内容以查看是否是这种情况:

Test-Path $global:file

如果打印出False,则表示您的脚本无法找到json文件。在这种情况下,您应该将第一行更改为以下内容:

$file = (Join-Path $PSScriptRoot "backup_settings.json")