正在向Invoke Expression提交参数



我已经编写了一个名为C:\Script\Scrip1.ps1的Powershell脚本示例以下是代码

Function Testfunction(){
Param(
$Node1,
$Node2
)
$SQLNodes = @($Node1, $Node2)
foreach ($node in $SQLNodes)
{
#Some code below is dummy code
"$node" | Out-File C:File1.txt -Append
}
}

当我尝试使用invoke Expression调用此函数时,它不起作用

使用以下方法没有运气

$string = 'C:ScriptScript1.ps1 Testfunction -Node1 "test" -Node2 "test2"'
Invoke-Expression $string

我打开了一个PS窗口,在没有运气的情况下运行命令

.Script1.ps1 -Node1 Hello -Node2 Aquib

.Script1.ps1 Testfunction -Node1 Hello -Node2 Aquib

我在C:\file1 下没有看到任何文件1

当我打开脚本文件然后运行函数时,它确实起作用并生成文件。

您不需要在场景中使用Invoke-Expression

如果要使Testfunction在当前范围内可见,则需要";点源";您的脚本:

PS C:> . C:ScriptsScript1.ps1

这将在当前作用域中执行Script.ps1,它将在当前范围中定义Testfunction,然后您可以运行函数:

PS C:> Testfunction -Node1 "Test1" -Node2 "Test2"

另一种选择是跳过将Testfunction定义为脚本中的函数,只将其用作脚本本身:

# Script file
param(
$Node1,
$Node2
)
$SQLNodes = @($Node1, $Node2)
foreach ($node in $SQLNodes) {
#Some code below is dummy code
"$node" | Out-File C:File1.txt -Append
}

如果您将脚本命名为Testfunction.ps1,您可以通过键入脚本名称来运行它:

PS C:> C:ScriptsTestfunction.ps1 -Node1 "Test1" -Node2 "Test2"

最新更新