2

Windows 8 で問題なく動作するスクリプトを作成しました。Windows 7 に切り替えて、あらゆる種類の血を流しました。いくつかのデバッグの後、問題が見つかりました。Win 8 は PowerShell 3.0 を使用し、Win 7 は PowerShell 2.0 を使用します。また、PowerShell 3.0 では、以下を使用するときに二重引用符を使用できます。

$ExecutionContext.InvokeCommand.ExpandString($var)

私のコードは、二重引用符を使用する多くの文字列でこれに大きく依存しているため、解決策を見つけようとしています。

私の文字列の一部がそのようなものであるため、ヒア文字列は機能しませんでした:

$var = 'this is a "sample" of $one of my strings'

here-string の回避策は、関数でこのコードを頻繁に使用するため、テキスト ファイルに出力する場合にのみ機能します。

Microsoft の Web サイトで、これに関連するバグを見つけました。PowerShell 3.0 での動作は、本来の動作を意図したものです。また、Windows 7 を PowerShell 3.0 にアップグレードすることは論外です。

4

2 に答える 2

6

3 未満の PowerShell バージョンをテストしてから、次のように二重引用符をエスケープできます。

C:\PS> if ($PSVersionTable.PSVersion.Major -lt 3) { $var = $var -replace '"','`"' }

C:\PS> $ExecutionContext.InvokeCommand.ExpandString($var)
this is a "sample" of one baby of my strings
于 2012-11-15T23:12:25.003 に答える
0

$var を二重引用符で囲むだけではどうですか?

于 2012-11-16T15:10:57.060 に答える