2017-12-31 13 views
3

Ich habe folgendes Skript funktioniert es gut in ISE. Ich kann dieses Skript von ISE ausführen und debuggen.Power Shell-Skript funktioniert gut in Windows Power Shell ISE, aber es funktioniert nicht in Power Shell Version 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(); 

Aber in Powershell-Version 5 ist das Ergebnis: -

bereitgestellt Text ist kein gültiger JSON-String

Bitte beachte, dass ich im selben Verzeichnis backup_settings.json haben. Was könnte der Grund sein? Wie kann ich das in PowerShell mit korrekten Ergebnissen ausführen?

Aktualisiert Code und Ergebnis: -

versuchte ich folgendes: -

$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(); 

Ergebnis: -

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

Haben Sie versucht, zu debuggen? Deinen Code durchgehen, um zu sehen, was falsch ist? Im PowerShell-Konsolenhost können Sie immer noch debuggen, indem Sie 'Set-PSBreakpoint' verwenden (einmal an der Debug-Eingabeaufforderung, geben Sie' h' ein, um Hilfe zum Durchlaufen zu erhalten). – briantist

+0

Ich bin neu in PS-Skripting. Ich weiß nicht, wie ich es machen soll. Ich werde versuchen, es zu googeln. Wenn Sie einen Link vorschlagen können, wie Sie es debuggen, wie Sie vorschlagen. Es wird hilfreich sein. Es ist sehr mysteriös. – masiboo

+0

'$ file' ist nicht dasselbe wie' $ global: file'; Ihre 'Parse()' Methode sollte den Dateinamen als Parameter verwenden. Wenn Sie zuerst mit dem globalen Test testen möchten, stellen Sie sicher, dass Sie jedes Mal $ global: file verwenden, wenn Sie auf die Variable verweisen. – briantist

Antwort

2

wie der Pfad zu Ihrer JSON-Datei Sounds nicht richtig aufgelöst, wenn Sie führen es in Powershell. Fügen Sie die folgende zu sehen, ob das der Fall ist:

Test-Path $global:file 

Wenn es False ausdruckt, das würde bedeuten, dass das Skript nicht in der Lage ist, die JSON-Datei zu finden. In diesem Fall sollten Sie wahrscheinlich die erste Zeile in etwas wie diese ändern:

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

Bitte überprüfen Sie meinen aktualisierten Code und das Ergebnis. Es sieht sehr mysteriös aus. – masiboo

+0

Ich habe es $ file = (Join-Path $ PSScriptRoot "backup_settings.json"). Entschuldigung, ich habe vergessen, die $ this.json = Get-Content-Raw $ global: Datei zu aktualisieren; zu $ Datei. Es ist jetzt in Ordnung – masiboo

Verwandte Themen