2013-07-08 129 views
2

我有這樣創建一個txt文件,一個簡單的PowerShell腳本: -ColdFusion的變量納入PowerShell中

set-executionpolicy unrestricted -force 

$MyVar = 'My Content' 

$MyVar | out-file -FilePath "C:\_Testing\test.txt" 

這是從這裏的ColdFusion腳本調用: -

<cfexecute name="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" 
    arguments="C:\ColdFusion9\wwwroot\testsite\wwwroot\_Testing\powershellTest.ps1"/> 

這工作 - 創建txt文件並放入內容,但我想要做的是通過cfexecute將變量傳入$ MyVar,以便內容是動態的。

任何幫助非常感謝

保羅

+0

這只是一個黑暗中的鏡頭,但是你能在你的'.ps1'文件中放入一個唯一的字符串嗎?就像'$ MyVar ='CFVARIABLEGOESHERE''?然後,在使用'cfexecute'之前,你可以使用'CFFILE'來打開你的'.ps1'文件,找到並用你想要的任何東西替換'CFVARIABLEGOESHERE'。一旦你完成了替換,你可以使用cfexecute調用新保存的文件? –

回答

1

你需要的是有參數的腳本。參數定義放在你的腳本的頂部,而像這樣:

param(
    [Parameter(Mandatory=$true)] 
    [string] 
    # Variable to test that parameter is getting set from ColdFusion 
    $MyVar 
) 

$MyVar | Set-Content "C:\_Testing\test.txt" 

先來的屬性,這是關於參數的元數據。在這個例子中,我們聲明參數是強制性的,如果沒有提供值,PowerShell會給出錯誤。

接下來是變量的類型。您可以使用任何.NET類型,例如[int][DateTime],[Hashtable]

在類型之後,是變量的文檔,當有人運行Get-Help powershellTest.ps1時很有用。

最後,我們聲明變量$MyVar

您可以在about_functions_advanced_parameters幫助主題中獲得有關參數,參數屬性,驗證等的更多信息。現在

,棘手的問題是,你對PowerShell的調用實際上經歷cmd.exe第一,所以這取決於你的腳本參數的值,你可能需要做一些時髦的魔法把事情正確引用。另外,使用Set-Content而不是Out-FileOut-File用於保存二進制對象和數據,並將在UCS-2中對文本文件進行編碼。 Set-Content將以ANSI/UTF-8編碼文件。

+0

輝煌 - 這正是答案 - 完美的作品...對於其他人來說,cf代碼如下所示: - Ma ny謝謝 Paul –

1

你可以做的是讓它在一個功能,允許參數。然後你可以根據需要用params調用函數。

例子:

function CreateText 
{ 
    param ([string]$MyVar 
) 

$MyVar | out-file -FilePath "C:\_Testing\test.txt" 

} 

CreateText -MyVar "Content Here"  

你可以這樣調用它:

<cfexecute name="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" 
arguments="C:\ColdFusion9\wwwroot\testsite\wwwroot\_Testing\powershellTest.ps1 -MyVar "conent" "/> 
+0

感謝凱文,我認爲那差不多沒有。 我已經改變了PowerShell腳本,所以它看起來是這樣的: - 功能CreateText { 參數([字符串] $ MyVar的) $ MyVar的|出文件-FilePath 「C:\ _測試\ test1.txt的」 } CreateText -MyVar $ MyVar的 和我的CF腳本: - 沒有內容通過:( –