2

我有一个简单的 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 以便内容是动态的。

非常感谢任何帮助

保罗

4

2 回答 2

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" "/>
于 2013-07-08T17:26:11.673 回答
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_pa​​rameters帮助主题中获取有关参数、参数属性、验证等的更多信息。

现在,棘手的部分是您对 PowerShell 的调用实际上是cmd.exe 通过的,因此根据脚本参数的值,您可能需要做一些时髦的魔法才能正确引用。

另外,使用Set-Content代替Out-File. Out-File用于保存二进制对象和数据,并将在 UCS-2 中编码文本文件。 Set-Content将以 ANSI/UTF-8 对文件进行编码。

于 2013-07-09T07:34:42.103 回答