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
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
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
'$ 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