2014-02-11 21 views
0

字符串是有辦法排除結腸(:),這樣你就可以通過參數字符串打印出來?結腸作爲參數

小例子:

PowerShellTest.ps1:

param (
    [string]$message="Error: No message defined!" 
); 
"Info: Test-Information" 
$message; 

,如果你現在可以通過PowerShell啓動這個腳本:

powershell.exe D:\PowerShellTest.ps1 -message "Error: Test-Error" 

現在你只能輸出字符串Error:其餘的將是切斷

我有什麼做的就是在整個字符串Error: Test-Error

回答

1

問題不結腸,但空間。你需要使用反色標來逃避它:

powershell.exe D:\PowerShellTest.ps1 -message 'Error:` Test-Error' 
+0

這就是它! Ty 但爲什麼有必要排除空白?它背後的邏輯是什麼? – 5im

+0

我想像它是與你在PowerShell進程是和啓動另外一個使用這些參數。第一個shell需要轉義所有數據才能正確地將其發送到新的數據庫。正如vonPryz所建議的,如果從普通的cmd命令提示符運行,使用單引號就足夠了。 – arco444

0

使用單引號'代替雙引號"像這樣,

​​
+0

在PowerShell中的工作(不切斷): \ Test.ps1 -message「錯誤:測試錯誤」 而且在PowerShell中,這是行不通的(切斷): powershell.exe測試.ps1 -message'錯誤:測試錯誤' – 5im

0

你爲什麼以這種方式運行它?當您從內Powershell的powershell.exe您強制的參數要經過舊的Windows風格CMD.EXE命令行處理。

相反,你只是應該直接調用腳本:

PS C:\scripts> .\PowershellTest.ps1 -message "Error: Test-Error" 
Info: Test-Information 
Error: Test-Error 

這樣,所有的參數都將直接通過通過,而不被轉換爲字符串,其剝離雙引號,然後被重新解析。

如果你得到一個錯誤,因爲運行的腳本是不允許的,那麼答案是改變你的執行策略,不要啓動的powershell.exe另一個副本:

PS C:\scripts> .\PowershellTest.ps1 -message "Error: Test-Error" 
.\PowershellTest.ps1 : File C:\scripts\PowershellTest.ps1 cannot be loaded because running scripts is disabled on this 
system. For more information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170. 
At line:1 char:1 
+ .\PowershellTest.ps1 -message "Error: Test-Error" 
+ ~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : SecurityError: (:) [], PSSecurityException 
    + FullyQualifiedErrorId : UnauthorizedAccess 

如果您看到這個錯誤,然後啓動一個PowerShell窗口使用「以管理員身份運行」選項,並輸入命令:

Set-ExecutionPolicy RemoteSigned 

關閉管理員PowerShell和重新啓動所有正在運行的其他PowerShell的窗口,現在你應該可以運行沒有任何本地創建的腳本 問題。

+0

很明顯。我只是把我的問題減少到了最低限度。在現實世界中,它將從Java應用程序執行和監視。 – 5im

+0

@ 5im我認爲在減少你的問題時,你把它變成了另外一個。傳統程序通過一個字符串接收它們的參數。當您使用Powershell調用這樣的程序時,您必須考慮PS如何將命令參數轉換爲命令行字符串,然後再通過命令解析該字符串。當你從Java運行它時,你將有一組完全不同的轉換到需要考慮的命令行字符串中,然後進行相同的解析。任何逃避例如兩者之間的空間可能會有所不同。 – Duncan