2016-10-12 12 views
2

のためのPowerShell 2.0の交換が必要私はPowerShellの最近のバージョンに適していますポストビルドプロセスの一部として、次のPowerShellコマンドを使用しましたPowerShell 2.0のみがインストールされたポールダクションマシンに相当します。このマシン上でコマンドを実行すると は、私は次のエラーを取得する:はstring.replace方法

C:\Builds\29\nSKEP\Dev_Continue\src\Tests\VSTest\SKCltMgrTest>powershell.exe –command "(Get-Content VSTEST.BAT).replace('__DLL_NAME__', 'SKCltMgrTestu.dll') | Set-Content 'C:\Builds\29\nSKEP\Dev_Conti 
nue\bin\VSTEST_SKCltMgrTest.BAT' 
Method invocation failed because [System.Object[]] doesn't contain a method named 'replace'. 
At line:1 char:33 
+ (Get-Content VSTEST.BAT).replace <<<< ('__DLL_NAME__', 'SKCltMgrTestu.dll') | Set-Content 'C:\Builds\29\nSKEP\Dev_Continue\bin\VSTEST_SKCltMgrTest.BAT' 
    + CategoryInfo   : InvalidOperation: (replace:String) [], RuntimeException 
    + FullyQualifiedErrorId : MethodNotFound 

私は、必要なメソッドが唯一のPowerShellのそれ以降のバージョンで導入されたとします。

テキストファイルの文字列をPowerShell 2.0と互換性のあるone-linerで置き換える同等の方法はありますか?

+1

にこれが失敗した理由は、偶然にではありませんが、それ以降のバージョンでは、起動する機能を導入しましたので、メソッドを同じ型のオブジェクトの配列に追加します。 '-replace'を使うのはここでの正しいアプローチですが、それが存在しなかったり十分でない場合、PowerShell 1に相当するコードは'(Get-Content VSTEST.BAT)| Foreach {$ _。replace(...}) '。 PowerShell 3(または4、これらのことに関する文書はひどいです)では、これを省略することができます。 –

答えて

2

代わりreplace方法の-replace使用してみてください:方法がないため

powershell.exe –command "(Get-Content VSTEST.BAT) -replace '__DLL_NAME__', 'SKCltMgrTestu.dll' | Set-Content 'C:\Builds\29\nSKEP\Dev_Continue\bin\VSTEST_SKCltMgrTest.BAT' 
+1

それは速かった!そしてそれは動作します!ありがとう。 – Scrontch

関連する問題