我使用以下PowerShell命令作为后期构建过程的一部分,该过程适用于最新版本的PowerShell:
powershell.exe –command "(Get-Content VSTEST.BAT).replace('__DLL_NAME__', 'SKCltMgrTestu.dll') | Set-Content 'C:\Builds\29\nSKEP\Dev_Continue\bin\VSTEST_SKCltMgrTest.BAT'
但是我意识到我需要一个只装有PowerShell 2.0的产品的等效产品。 在此计算机上执行命令时,出现以下错误:
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兼容的单行替换文本文件中单个字符串出现的等效方法?
答案 0 :(得分:3)
尝试使用powershell -replace
代替.net 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'