2011-02-25 48 views
1

我有一行Powershell命令,從命令行完美地工作。簡單的Powershell命令掛起後生成事件中的Visual Studio 2010

但是,當我將它添加到我的VS2010項目的構建後命令中時,它會運行,但只會掛起Visual Studio。就好像Visual Studio只是坐在那裏等待Powershell命令完成一樣,即命令行只需按Enter鍵關閉窗口就可以了。因爲CPU使用率已經很低了。

我是否必須做任何特殊的事情才能讓正常的Powershell命令在VS2010後期編譯窗口中快速運行?

的命令是:

[io.file]::WriteAllText('C:\test.js', ((gc C:\test.js) -replace 'HELLO','GOODBYE' -join "`r`n")) 

所以在VS,我添加前綴通過PowerShell來啓動它,就像這樣:

Powershell [io.file]::WriteAllText('C:\test.js', ((gc C:\test.js) -replace 'HELLO','GOODBYE' -join "`r`n")) 

更新

這結束了做訣竅。感謝大家的不懈努力。

Powershell -command "[io.file]::WriteAllText('C:\test.js', ((gc C:\.js) -replace 'HELLO','GOODBYE' -join \"`r`n\"))" 

回答

3

後生成步驟由cmd.exe運行,所以你需要確保一切逃到通過PowerShell的進行處理,而不是cmd.exe

在您的命令中,cmd.exe將嘗試執行管道和sc本身。傳遞給sc.exe(命令行服務控制實用程序)的文本文件的快速測試表明它顯示幫助並在傳遞無效命令行時等待鍵盤輸入。

我建議使用完整的cmdlet名稱以避免含糊不清。

的命令應該是(在交互式cmd.exe測試確認)類似:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -command "(get-content C:\www\js\test.min.js) -replace 'HELLO','GOODBYE' | set-content C:\www\js\test.min.js" 

+0

感謝您的幫助。如果我的「命令」實際上已經有雙引號,那該怎麼辦? – Aaron 2011-02-25 12:01:38

+0

@Aaron:'cmd'確實有一個轉義字符('^'IIRC),或者如果你加引號('「」')? Cmd的文檔很難找到,所以你可能需要一些努力。另一種選擇是將PSH腳本放入一個文件中(作爲「無內置」添加到項目中)並使用命令行執行該文件。 – Richard 2011-02-25 12:08:20

+0

好吧,這是它。這完全適用。我還能夠使用分號將4個命令鏈接在一起,以便我可以從VS中的一行中全部調用它們。再次感謝: Powershell -command「[io.file] :: WriteAllText('C:\ test.js',((gc C:\ .js)--replace'HELLO','GOODBYE'-join \」' ('c:\ test.js',((gc C:\ test.js)''''')替換'HELLO','GOODBYE' - 加入\「' ('c:\ test.js',((gc C:\ test.js)''''')替換'HELLO','GOODBYE' - 加入\「' ('c:\ test.js',((gc C:\ test.js)''''')替換'HELLO','GOODBYE' - 加入\「' r'n \「))」 – Aaron 2011-02-25 12:43:52

1

試試這個:從gc

gc C:\www\js\test.min.js -read 0 

還是第一家專賣店結果到一個局部變量,然後調用sc。有開放的讀取句柄可以防止PowerShell打開文件進行寫入。

+0

成功完成和VS沒掛..嘿它再次誰在幫助我另一個線程,非常感謝!所以現在我只想讓VS運行你在另一個線程中顯示給我的偉大命令..任何我可以做的事來解決開放式讀取的句柄?這是在構建後,所以我想我會完成所有的文件。命令是:[io.file] :: WriteAllText('C:\ test.js',((gc C:\ test.js) - 替換'HELLO' ,'GOODBYE' - 加入「'r」n「)) – Aaron 2011-02-25 12:04:28

+0

我認爲命令'[io.file] :: WriteAllText(path,(gc path))'應該運行沒有問題,因爲文件的內容首先被讀取,然後用'WriteAllText'寫入。 – stej 2011-02-25 12:31:53

+0

它仍然有一些奇怪的問題,但我認爲你的原始預感是正確的,因爲它們可能是文件鎖定問題。 VS/Powershell的組合看起來很片斷。最後,它似乎沒有問題,我上面張貼的最後一個片段。 Thx再次堆積。 – Aaron 2011-02-25 12:45:54

相關問題