Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用powershell函数的批处理脚本_Powershell_Batch File_Powershell 2.0 - Fatal编程技术网

调用powershell函数的批处理脚本

调用powershell函数的批处理脚本,powershell,batch-file,powershell-2.0,Powershell,Batch File,Powershell 2.0,批处理文件是否有方法调用powershell函数?我试过了 powershell ". .\tes.ps1; Test-Me -Param1 'Hello world' -Param2 12345" 它可以工作,函数可以被调用,但是powershell脚本中的其他所有内容也可以被调用。 看起来您要做的是点源tes.ps1,这样您就可以使用该文件中定义的测试Me功能。当您点源文件时,该文件中的所有内容都将被执行。如果在tes.ps1中有其他不想执行的命令,则需要将Test Me放在一个单独的文

批处理文件是否有方法调用powershell函数?我试过了

powershell ". .\tes.ps1; Test-Me -Param1 'Hello world' -Param2 12345" 
它可以工作,函数可以被调用,但是powershell脚本中的其他所有内容也可以被调用。

看起来您要做的是点源tes.ps1,这样您就可以使用该文件中定义的测试Me功能。当您点源文件时,该文件中的所有内容都将被执行。如果在tes.ps1中有其他不想执行的命令,则需要将Test Me放在一个单独的文件中。最好的方法是:创建一个名为Test Me.ps1的文件,其中包含函数的内容(不要使用
函数{[…]}
声明函数,只需将代码包含在函数的脚本块中),然后在批处理文件中像这样调用它:

powershell "<path>\Test-Me.ps1 -Param1 'Hello world' -Param2 12345"
powershell“\Test-Me.ps1-Param1‘你好世界’-Param2 12345”

@Adi-Inbar的解决方案非常有效

还有另一种方法(更多的是从结构化的角度):如果tes.ps1仅包含函数,请创建一个全新的脚本,其中包含以下内容:

.\tes.ps1
Test-Me -Param1 'Hello world' -Param2 12345
然后在批处理文件中,使用“file”参数运行这个全新的脚本:

Powershell -file *path_to_PS_script*
首先运行tes.ps1,它将加载脚本范围内的所有函数。您可以选择要运行的函数


通过这种方式,tes.ps1文件充当函数的中央库

将整个命令行作为单个字符串传递给powershell应该可以工作,但我更喜欢使用
-File
选项:
powershell-File“C:\path\to\Test Me.ps1”-Param1“Hello world!”-Param2 12345
。我推断tes.ps1不仅仅包含函数,因为他说“powershell脚本中的所有其他内容”也会接到电话。如果它只包含函数,那么点源和调用他正在做的函数就可以了。@Adi Inbar我从问题中得到的是,他/她只想调用特定的函数,而不想“调用其他任何东西”。对。如果都是函数定义,那么除了他在点源之后显式调用的函数之外,不会调用任何函数。如他所说,如果脚本文件中的其他内容是在他点源时执行的,那么这并不是所有的函数定义。我猜他说“但是powershell脚本中的其他内容也是如此”时并不清楚。如果我的猜测是正确的,它意味着:1.变量被“加载”到会话中。2.正在“加载”到会话的其他函数。当您点源一个脚本时,脚本中的所有变量和函数都将被“加载”,尽管它们可能不会被专门“调用”。我有一种感觉,他/她认为“被加载”是“被执行”,但这是一种假设@用户2526047如果你能澄清这一点,请说明。@Adi你是对的。我的印象是doc sourcing只将变量/函数加载到环境中。不,它在脚本中“执行所有内容”。谢谢