批处理文件怎么调用Pwershell脚本里的函数


PowerShell交流中心分类: 变量-函数-脚本-条件-循环-参数批处理文件怎么调用Pwershell脚本里的函数
0
wangch asked 9 年 ago

有一个powershell脚本,aaa.ps1,脚本内容:
function PutLog() {}
function Main
{
  PutLog 1 2 3
}

Main

现在我想在批处理文件里直接调 aaa.ps1 里的PultLog()这个函数,可以吗?具体怎么写?
谢谢!

0 Answers
1
Mooser Lee 管理员 answered 9 年 ago
PowerShell -Command "& { ' . .\aaa.ps1';PutLog}"
wangch replied 9 年 ago

多谢Mooser的回复,有几个问题继续请教:1. 这个&是如下的意思吗?“默认键入一个字符串,powershell会将它原样输出,如果该字符串是一个命令或者启动程序,在字符串前加‘&’可以执行命令,或者启动程序。 如&”ls” ”2.{}是什么作用呢?3.我执行这条语句,报说没有putlog这个命令,是不是前边的脚本不应该加 ‘ ‘?4.最重要的,我理解哈,用 . .\aaa.ps1虽然会加载putlog函数,但同时也会执行一遍aaa.ps1脚本,我的这个脚本里还有别的语句,只是现在要用其中的一个putlog函数。在不新建文件的情况下,还有别的办法吗?多谢多谢!

Mooser Lee 管理员 replied 9 年 ago

你前面的理解是对的!但是后面的思路不对。如果你要加载函数,那个函数脚本应当只包含函数的定义,而不应当包含其它逻辑。比如myfunction.ps1, 先load函数,然后执行里面的mymethod。如果不引入新的文件,理论上是可行的,但是显得不伦不类。你用正则表达式把函数定义的字符串解析出来,比如解析出来的结果是:$myfunc = “function test() {‘test’}” 然后再Invoke-Expression $myFunc ; test

Mooser Lee 管理员 replied 9 年 ago

我们一般对把主要的逻辑写在PowerShell中。用PowerShell调用cmd或者批处理。这才是正道。

Mooser Lee 管理员 replied 9 年 ago

有的时候,个别人不知道如果运行PowerShell脚本,我们再会给它一个启用powerShell脚本的批处理引导程序。但是只是引导,里面不应当包含过多的逻辑。

wangch replied 9 年 ago

嗯,知道了。我这个情况是,客户规定了只有两个文件,.bat和.ps1,主要逻辑是在ps1里,也包括打LOG的函数;然后作为引导程序的bat,也需要打LOG,所以我想可不可以直接用ps1里已经定义好了的LOG函数。看来不行了,那我就在bat里powershell Write-EventLog …吧。顺便说,这个网站非常好!国内最好的学PowerShell的地方了。还能得到Mooser大神的亲自回复,非常感谢!