0

レジストリを編集するコードがあるため、管理者として実行する必要があります。これを行うには、実行中の PowerShell スクリプトから新しい PowerShell プロセスを開始し、レジストリ キー パスの一部を渡します。これはたまたまバージョン番号 (例: "12.0") です。ただし、新しい PowerShell プロセスの関数は文字列を「12.0」ではなく「12」として受け取るため、レジストリ キーが見つからないというエラーが発生します。

問題を再現する小さなサンプル powershell スクリプトを作成しました。スニペットは次のとおりです。

$ScriptBlock = {
    function Test([string]$VisualStudioVersion)
    {
        $VisualStudioVersion    # This always displays 12, instead of 12.0
        $Host.UI.RawUI.ReadKey()
    }
}

# Run the script block's function.
Start-Process -FilePath PowerShell -ArgumentList "-Command & {$ScriptBlock Test(""12.0"")}"

ここでは「12.0」をハードコーディングしましたが、実際には変数を渡したいと考えています。

私が間違っていることについてのアイデアはありますか?前もって感謝します。

4

1 に答える 1

0

わかりました、いくつかの実験の後、以下は正しく動作するようです:

Start-Process -FilePath PowerShell -ArgumentList "-Command & {$ScriptBlock Test('12.0')}"

変数を使用する場合でも機能します。

$version = "12.0"
Start-Process -FilePath PowerShell -ArgumentList "-Command & {$ScriptBlock Test('$version')}"

二重引用符を使用すると精度が失われ、単一引用符を使用すると精度が維持される理由はまだわかりませんが、少なくとも問題は解決しました。

アップデート

したがって、私はダミーであることがわかりました。問題はTest(""$version"")、適切な PowerShell 構文ではなく、C# 構文を使用して関数を呼び出していたことTest ""version""です。この変更により、期待どおりに動作するようになりました。

于 2014-03-19T22:43:04.537 に答える