使用F#脚本替换生产环境中的powershell?

时间:2015-05-11 15:07:39

标签: powershell f#

我一直在使用powershell脚本来自动执行生产服务器上的某些任务。但是,当我尝试对异步和并行处理等做一些事情时,它就达到了极限。

F#脚本是否适合替换PowerShell脚本? (猜测在访问文件系统和其他操作系统对象时会更麻烦,这在Powershell中非常容易)。服务器没有安装visual studio。是否可以将fsi.exe复制到服务器以运行fsx文件?

用例,

  1. 从慢速FTP服务器下载大型zip文件
  2. 解压缩文件
  3. 执行可执行文件以处理解压缩文件
  4. 每个步骤需要一段时间,所以我想做类似下面的事情,这在PowerShell中很难做到

    //Limit download 3 files at the same time maximum.
    async {
      let! zip = GetFromFTP ...
      let! file = Unzip zip
      do! ... //Run exe to parse file
    }
    

3 个答案:

答案 0 :(得分:5)

您可能会发现FAKE仅对fsi.exe更有用。它自动化构建,但它只是一个.fsx文件,具有可以从命令行运行的不同目标。

答案 1 :(得分:5)

F#脚本不是完全替换PowerShell的好选择 - 正如您所提到的,F#是一种低级语言,因此您需要编写更多代码来执行基本的系统自动化操作。 F#也没有与其他Windows服务器技术很好地集成,因此这将是另一场艰苦的战斗。如果你真的想要走这条路,你应该在你的服务器上安装F# 3.1.2 bundle,它将部署FSharp.Core运行时和fsc / fsi。

由于powershell和F#都基于.NET,另一个选择是在F#中将更多算法,计算密集型代码编写为DLL,然后将其加载到PowerShell中。你甚至可以write Powershell cmdlets directly in F#。我过去成功地使用过这种方法。

如果您的具体问题与代码的并行/异步执行有关,那么powershell background jobs可能是相关的。

编辑关于powershell / F#互操作性的主题,Powershell Type Provider也可能值得调查。

答案 2 :(得分:2)

在服务器上编写自动化代码时,F#当然是一个有趣的选择,但是你最终会先编写很多基本的cmdlet。是的,F#可能是一个很好的选择,但你很可能在一开始就很挣扎。不要期望采用20行电源shell脚本并获得20行F#脚本。您在F#中拥有真正优势的关键点更可能是接近1000行的PowerShell代码,即当您实际编写程序时。

Powershell不是一个非常好的语言,但它带有比F#更多的内置功能。也就是说,我打赌V.B.正在谈论关于FAKE。 FAKE还带有很多内置的东西,但远不及PowerShell那么多。

因此,如果您的目标是编写一些cpmvrm或任何预先存在的cmdlet的内容,那么您将对F#感到失望。但是如果您正在编写更复杂的处理,cmdlet只是输入/输出,那么从长远来看,您可能会对F#感到满意。