早上我喜欢新机器的气味。
我正在自动创build一个机器创build工作stream程,该工作stream程涉及我的基础架构中的多个独立系统,其中一些涉及Solaris主机上的15年Perl脚本,PXE引导Linux系统和Windows Server 2008上的Powershell。
我可以编写每个单独的部分,并且集成Linux和Unix自动化相当简单,但是我不知道如何将Powershell脚本可靠地连接到其他进程。
我宁愿如果这个过程开始于Linux主机,因为我认为它将最终成为一个生活在Apache服务器上的Web应用程序,但是如果它需要在Windows上开始,那么我对此犹豫不决。
我希望Linux的psexec可以和Windows一样运行,但Cygwin看到了这个方向的答案,尽pipe我很欣赏他们所付出的辛勤劳动,但是从来没有感觉到这是正确的 ,如果你明白我的意思。 这对于桌面系统来说是非常棒的,并且提供了很多function,但是我觉得Windows服务器应该像Windows服务器一样被对待,而不是被混为一谈的Unix机器(顺便说一下,这也是我对OSX服务器的争论, 实际上它们是Unix) 。 无论如何,我不想和Cygwin一起去,除非这是最后也是唯一的select。
所以我想我要问的是,如果有一种方法可以从Linux的Windows机器上执行作业。 没有Cygwin。 我很乐意提出一些想法和build议,包括“看起来白痴,每个人都使用Cygwin,所以把它搞砸,然后处理”。 提前致谢!
我花了几个小时来解决这个问题,最终归结为两个可行的select(那里有很多不可行的选项):
第二种方法是坚持通过GNU / Posix抽象层进行攻击,以获取实际的窗口位。 这限制了你能用它做什么。
第一个选项几乎构build了一个基于Web的抽象层,您可以在完整的本机堆栈Windows安装之上编写自己的代码。 如果你愿意投入工作,Linux主服务器只需要做一堆curl调用来完成需要做的事情。 这在脚本被遗忘的时候效果最好,因为构buildcallback系统需要花费更多的精力。
您还可以购买跨平台计划或工作stream自动化软件,这可以根据以前的操作,甚至返回的结果,启动许多主机上的本机脚本。 大型企业使用像Tivoli,UC4,Espresso(CA dSeries,现在)这样的软件,而且我已经在需要做这类事情的大型企业中使用它。 仅供参考,这些通常对Oracle作业等内容有本地支持,可以让您了解您可能正在查看的价格。
(在我以前的工作中,他们也使用Cygwin,这样当工作负载在不同平台之间移动时,他们可以使用相同的Perl脚本,而无需修改。
你也可以尝试build立自己的,如@ sysadmin1138所示; 这将是一个有趣的项目,甚至可能结束足够强大的可用性,并没有让你在凌晨2点,当金融出口失败的第一次尝试。
我将使用Powershell v3.0中引入的Powershell Web访问function。 这使您可以从Linux主机使用Powershell脚本。
PowerShell服务器可让您连接到Windows服务器并获得PowerShell控制台。 除了免费试用之外,我还没有使用它,但是我的非正式使用certificate这是一个相当可靠的产品。
你以后想怎么感觉,因为总是有telnet 🙂
说真的,为什么你需要Linux服务器来调用PowerShell脚本? 你可以重新devise你的工作stream程,以便Linux服务器通过tftp传递正确的boot.wim映像到PXE引导的主机? 过去我曾经运气良好,在Windows文件服务器上保留一个带有不同应答文件的Windows映像,并使用Linux主机上的tftpd提供自定义WinPE启动映像。 然后,您可以让答案文件调用正确的PowerShell脚本,而不必像Cygwin一样处理跨平台的恶意行为。
你可以使用类似nrpe的东西来远程执行Windows主机上的powershell脚本。 您可能想要修改您的PowerShell脚本以按照nrpe的预期返回退出代码,但没有理由不能从您的Linux主机上的脚本中调用check_nrpe。
关于反直觉黑客的话题,你有没有考虑滥用连续集成软件作为一个跨平台的编排工具?
在任何地方最方便的地方安装CI主控 ,在你的Windows机器上安装代理(或者这个或者这个 ),configuration一个工作来执行你的powershell脚本(或者直接使用Windows Batch Commandconfiguration调用它,或者如果你想要使用插件在CI应用程序中写入/保留脚本),并通过curl或类似方式远程触发作业 。
我在这个问题很普遍的大企业工作。 对于我们目前支持的方法,我们的方法是让Unix系统对在IIS上运行ColdFusion的“admin”Windows服务器进行Web调用。 我们有从GET请求触发的类和函数,它们使用“cfexecute”指令来启动特定的PowerShell脚本。 这是丑陋的,但它的作品。 我们正在研究PowerShell v3 Web服务function,以从ColdFusion作为中间人转变而来。