2013-07-08 87 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脚本: - 没有内容通过:( –