我已经编写了一个名为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"