以下のスクリプトが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
デバッグを試しましたか?何が間違っているかを確認するためにコードをステップ実行しますか? PowerShellコンソールホストでは、 'Set-PSBreakpoint'を使ってデバッグすることができます(デバッグプロンプトでは、ステップ実行方法のヘルプを表示するには' h'と入力します)。 – briantist
私はpsスクリプトの新機能です。私はそれをする方法を知らない。私はそれをGoogleにしようとします。あなたが提案したようにデバッグする方法を任意のリンクに提案できる場合。それは参考になるでしょう。それは非常に神秘的です。 – masiboo
'$ file'は' $ global:file'と同じではありません。あなたの 'Parse()'メソッドはファイル名をパラメータとして取ります。まずグローバルでテストしたい場合は、変数を参照するたびに必ず '$ global:file'を使うようにしてください。 – briantist