我有一个简单的PowerShell脚本,可以创建一个txt文件: -
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 :(得分:1)
您可以做的是使其成为允许参数的函数。然后,您可以根据需要使用参数调用该函数。
示例:
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" "/>
答案 1 :(得分: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-File
。 Out-File
用于保存二进制对象和数据,并将在UCS-2中编码文本文件。 Set-Content
将使用ANSI / UTF-8编码文件。