我想知道如何使用.Bat文件调用powershell函数。
我有这个简单的功能:
(Script.ps1)
function testfunction
{
Write-Log "Calling from Bat file"
}
我想在.Bat文件中调用函数testfunction。
powershell。\ Script.ps1 ...
答案 0 :(得分:4)
我注意到有一个开关-ExecutionPolicy ByPass
允许批处理文件使用Powershell运行。这可以在这里使用,取自vonPryz的答案。
@echo off
:: Create a test script file
echo function test { write-host "Called from %~f0" } > s.ps1
powershell -ExecutionPolicy ByPass -command ". "%cd%\s.ps1"; test;"
del s.ps1
pause
答案 1 :(得分:2)
使用-command
开关启动Powershell,包含脚本并调用该函数。在调用函数之前,您需要对脚本进行点源。
:: Create a test script file
C:\temp>echo function test { write-host "Called from .bat" } > c:\temp\s.ps1
C:\temp>powershell -command ". c:\temp\s.ps1; test;"
:: Output
Called from .bat
另外,请查看some samples。
答案 2 :(得分:0)
我通常这样做:
powershell {Set-ExecutionPolicy unrestricted}
powershell.exe -executionpolicy ByPass ./script/powerhsell-script.ps1 %par1% %par2%
powershell {Set-ExecutionPolicy Restricted}
希望你需要:)
答案 3 :(得分:0)
我已经使用
完成了powershell.exe -ExecutionPolicy Bypass -file ".\Write_date.ps1"
似乎与其他人写的类似,但我不确定vonPryz在调用脚本之前需要点源脚本的意思。以上工作在Win7上,executepolicy设置为限制。
答案 4 :(得分:0)
我知道这已经很老了,但是最近我试图做同样的事情,所以花了很长时间我才知道该怎么做。答案非常简单
在BatchFile(RunMe)
powershell -command“。Script.ps1; Set-SomeFunction%1%2%3%4%5”
然后您可以像这样调用批处理
RunMe -SomeParm val -SomeParm2 val -SomeSwitch -SomeBool $ true
也,以管理员身份运行
powershell-命令“ Start-Process -verb runas powershell”“'-noexit -command”。 Script.ps1; Set-SomeFunction%1%2%3%4%5%6%7%8%9'“