【问题标题】:Calling a powershell function using a .bat file使用 .bat 文件调用 powershell 函数
【发布时间】:2013-06-11 04:46:39
【问题描述】:

我想知道如何使用 .Bat 文件调用 powershell 函数。

我有这个简单的功能:

(脚本.ps1)

function testfunction
{
Write-Log "Calling from Bat file"
}

我想在 .Bat 文件中调用函数 testfunction。

powershell .\Script.ps1 ...

【问题讨论】:

  • 既然有了 PowerShell,为什么还要使用 .bat 文件?
  • powershell 文件有一系列功能,它位于共享文件夹中。不同的批处理文件位于每个服务器的本地。批处理文件需要根据每个服务器的需要执行不同的功能,因此 .bat 文件需要根据服务器环境调用不同的功能。我是 powershell 新手,所以我认为这将是每个服务器进行自我管理的最简单方法。
  • 我的意思是,使用另一个 PowerShell 脚本而不是古老的 .bat 文件。
  • 第 1 步:学习基本的 PowerShell。
  • 好吧.. 这很有帮助。谢谢。

标签: powershell batch-file


【解决方案1】:

我注意到有一个开关 -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

【讨论】:

  • 感谢...%cd%...。我还不知道。
【解决方案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。

【讨论】:

  • 我猜这可以解决,但默认情况下在 Windows 8 中我收到此错误:--->。 : 无法加载文件 D:\abc\s.ps1,因为在此系统上禁用了运行脚本。有关更多信息,请参阅go.microsoft.com/fwlink/?LinkID=135170 上的 about_Execution_Policies。
  • @foxidrive 根据您喜欢的文档设置执行策略?
  • 问题是你不能给任何人建议而不告诉他们必须改变执行策略。它非常适合单台机器,但不适用于一般的脚本建议。
  • @foxidrive 我不太理解你的推理。诚然,OP 似乎缺乏基本的 Powershell 技能。因此,有关设置执行策略的额外提示可能很有用。再说一次,错误消息非常清楚,并提供了如何更改策略的好建议。
  • 我的意思是,使用这种技术的每个解决方案都需要一个警告,除非采取进一步的步骤,否则它将无法工作。公司环境中的人员也有可能无法禁用安全设置以使其正常工作。这不是一种“开箱即用”的技术,它会自行运行,这使得它对那些提出问题且没有技术知识的人来说不太有用。这是否说明了我的意思?
【解决方案3】:

我知道这已经很老了,但我最近试图做同样的事情,我花了很长时间才弄清楚该怎么做。答案非常简单

在批处理文件中(RunMe)

powershell -command ".Script.ps1; Set-SomeFunction %1 %2 %3 %4 %5"

然后你就可以像这样调用批处理了

RunMe -SomeParm val -SomeParm2 val -SomeSwitch -SomeBool $true

另外,以管理员身份运行

powershell -command "启动进程 -verb runas powershell" "'-noexit -command "。脚本.ps1; Set-SomeFunction %1 %2 %3 %4 %5 %6 %7 %8 %9'"

【讨论】:

    【解决方案4】:

    我通常是这样做的:

    powershell {Set-ExecutionPolicy unrestricted}
    powershell.exe -executionpolicy ByPass ./script/powerhsell-script.ps1 %par1% %par2%
    powershell {Set-ExecutionPolicy Restricted}
    

    希望你需要那个:)

    【讨论】:

      【解决方案5】:

      我已经使用了

      powershell.exe -ExecutionPolicy Bypass -file ".\Write_date.ps1"
      

      似乎与其他人写的类似,但我不确定 vonPryz 在调用脚本之前需要脚本的点源是什么意思。以上在执行策略设置为受限的 Win7 上工作。

      【讨论】:

        猜你喜欢
        • 2011-04-12
        • 1970-01-01
        • 1970-01-01
        • 2017-11-17
        • 1970-01-01
        • 2020-05-23
        • 1970-01-01
        • 2013-02-02
        • 1970-01-01
        相关资源
        最近更新 更多