F#运行Powershell脚本作为目标

时间:2015-11-30 19:21:29

标签: powershell f# f#-fake

尝试使用F#FAKE运行powershell脚本但没有任何反应......没有错误,目标加载但实际上没有运行。

// include Fake lib
#r "packages/FAKE/tools/FakeLib.dll"
#r "System.Management.Automation"

open System
open System.IO
open System.Diagnostics
open System.Management.Automation

    Target "Powershell" <| fun _ ->
    PowerShell.Create()
      .AddScript("& 'build-database.ps1'")
      .AddParameter("BuildVersion", version)
      .AddParameter("Debug", "")
      .Invoke()
      |> Seq.iter (printfn "%O")

// Dependencies
"Clean"
  ==> "Powershell"

// start build
RunTargetOrDefault "Powershell"

我错过了什么吗?没有任何错误,我不确定是什么问题。

*已更新*

这是我正在测试的powershell脚本,FAKE什么都不做。

New-Item c:\AnEmptyFile.txt -ItemType file

2 个答案:

答案 0 :(得分:1)

我终于想出了另一种有效的方法。如果其他人需要从F#FAKE中调用powershell脚本,以下方法对我有效。

Target "Powershell" (fun _ ->

        let p = new System.Diagnostics.Process();              
        p.StartInfo.FileName <- "cmd.exe";
        p.StartInfo.Arguments <- ("/c powershell -ExecutionPolicy Unrestricted .\\script.ps1)
        p.StartInfo.RedirectStandardOutput <- true
        p.StartInfo.UseShellExecute <- false
        p.Start() |> ignore

        printfn "Processing..."
        printfn "%A" (p.StandardOutput.ReadToEnd())
        printfn "Finished"
)

答案 1 :(得分:0)

可以使用Shell.Execute并调用powershell.exe

Target "ImportDb" (fun _ ->
    Shell.Exec("powershell.exe", "-NoProfile -ExecutionPolicy Bypass -File script.ps1") |> ignore)