2017-12-31 257 views
3

以下のスクリプトがISEで正常に動作します。私はこのスクリプトをISEで実行してデバッグできます。パワーシェルスクリプトはWindowsパワーシェルISEではうまく動作しますが、Powerシェルバージョン5では動作しません。

$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での結果は次のとおりです。 -

提供されたテキストは、私が同じディレクトリにbackup_settings.jsonている有効な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(); 

結果: - あなたのJSONファイルへのパスが正しくときに解決されていないよう

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 
+0

デバッグを試しましたか?何が間違っているかを確認するためにコードをステップ実行しますか? PowerShellコンソールホストでは、 'Set-PSBreakpoint'を使ってデバッグすることができます(デバッグプロンプトでは、ステップ実行方法のヘルプを表示するには' h'と入力します)。 – briantist

+0

私はpsスクリプトの新機能です。私はそれをする方法を知らない。私はそれをGoogleにしようとします。あなたが提案したようにデバッグする方法を任意のリンクに提案できる場合。それは参考になるでしょう。それは非常に神秘的です。 – masiboo

+0

'$ file'は' $ global:file'と同じではありません。あなたの 'Parse()'メソッドはファイル名をパラメータとして取ります。まずグローバルでテストしたい場合は、変数を参照するたびに必ず '$ global:file'を使うようにしてください。 – briantist

答えて

2

が鳴りますあなたはそれをpowershellで実行しています。スクリプトは、JSONファイルを見つけることができないことを意味している、

Test-Path $global:file 

それはFalseを出力した場合:その場合は参照するには、以下を追加します。その場合は、おそらく最初の行を次のように変更する必要があります。

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

更新されたコードと結果を確認してください。それは非常に不思議そうです。 – masiboo

+0

私はそれを$ file =(Join-Path $ PSScriptRoot "backup_settings.json")としました。申し訳ありませんが、$ this.json = Get-Content-Raw $ global:ファイルを更新するのを忘れました。 〜$ファイル。今は大丈夫です – masiboo

関連する問題