2012-11-15 46 views
2

好吧,我已經編寫了一個在Windows 8中完美運行的腳本。我切換到Windows 7並獲取各種血液。經過一些調試後,我發現了這個問題。運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' 

在此處的字符串替代方法只作品,如果我輸出到一個文本文件,我不想因爲我大量使用這個代碼在一個函數中。

我在微軟的網站上發現了一個與此相關的錯誤。它在PowerShell 3.0中的工作方式是它最初的工作原理。另外,將Windows 7升級到PowerShell 3.0也是不可能的。

+0

我剛剛升級了我的Powershell版本,現在我正在用Powershell 3運行Windows 7,並且字符串被正確擴展。 –

回答

6

可以測試PowerShell的版本小於3,然後逃避任何雙引號,像這樣:

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 
+0

一如既往Keith,您的解決方案非常出色。非常感謝,這完全符合我的需要。 – Vippy

0

如何只封閉是$ var在雙引號?