我一直在使用powershell脚本来自动执行生产服务器上的某些任务。但是,当我尝试对异步和并行处理等做一些事情时,它就达到了极限。
F#脚本是否适合替换PowerShell脚本? (猜测在访问文件系统和其他操作系统对象时会更麻烦,这在Powershell中非常容易)。服务器没有安装visual studio。是否可以将fsi.exe复制到服务器以运行fsx文件?
用例,
每个步骤需要一段时间,所以我想做类似下面的事情,这在PowerShell中很难做到
//Limit download 3 files at the same time maximum.
async {
let! zip = GetFromFTP ...
let! file = Unzip zip
do! ... //Run exe to parse file
}
答案 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)
Powershell不是一个非常好的语言,但它带有比F#更多的内置功能。也就是说,我打赌V.B.正在谈论关于FAKE。 FAKE还带有很多内置的东西,但远不及PowerShell那么多。
因此,如果您的目标是编写一些cp
,mv
和rm
或任何预先存在的cmdlet的内容,那么您将对F#感到失望。但是如果您正在编写更复杂的处理,cmdlet只是输入/输出,那么从长远来看,您可能会对F#感到满意。