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

Using F# script replace powershell in production environment?

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

F# 脚本是否适合替代 powershell 脚本? (估计在访问文件系统等其他OS对象时会比较麻烦,这在Powershell中很容易)。服务器没有安装 visual studio。将 fsi.exe 复制到服务器以 [​​=31=] fsx 文件是否可以?

一个用例,

  1. 从较慢的 FTP 服务器下载大的 zip 文件
  2. 解压缩文件
  3. 执行一个可执行文件来处理解压后的文件

每个步骤都需要一段时间,所以我想做类似下面的事情,这在 powershell 中很难做到

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

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

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#。我过去曾成功地使用过这种方法。

如果您的具体问题与 parallel/async 代码执行有关,powershell background jobs 可能相关。

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

F# 当然是在服务器上编写自动化代码的有趣选择,但您最终会首先编写大量基本的 cmdlet。是的,F# 在时间上可能是一个不错的选择,但您很可能在开始时会遇到困难。不要指望使用 20 行的 power shell 脚本并获得 20 行的 F# 脚本。使用 F# 的真正优势更有可能是接近 1000 行 powershell 代码,即当您实际用它编写程序时。

Powershell 不是很好的 语言 ,但它比 F# 有更多的内置功能。也就是我赌什么V.B。正在谈论关于 FAKE。 FAKE 也有很多内置的东西,但远不及 powershell.

因此,如果您的目标是编写一些 cpmvrm 或任何具有预先存在的 cmdlet 的内容,您会对 F# 感到失望。但是,如果您正在编写更复杂的处理程序,其中 cmdlet 只是输入/输出,您可能会对 F# 感到满意 运行.