将Powershell脚本与非Windows工作流程集成的方法?


16

我喜欢早晨新机器的气味。

我正在自动化一个机器创建工作流程,该工作流程涉及整个基础架构中的多个独立系统,其中一些系统涉及Solaris主机上15年之久的perl脚本,PXE引导Linux系统以及Windows Server 2008上的Powershell。

我可以编写各个部分的脚本,并且将Linux和Unix自动化集成在一起非常简单,但是我对如何可靠地将Powershell脚本与其余过程结合在一起感到困惑。

我希望该过程是在Linux主机上开始的,因为我以为它会以驻留在Apache服务器上的Web应用程序的形式结束,但是如果它需要在Windows上开始,那么我很犹豫。

理想情况下,我希望psexec可以使Linux在Windows上运行,但是Cygwin似乎在朝着这个方向做出了回答,尽管我很欣赏他们付出的所有辛勤劳动,但从来没有感觉到这种错误,如果你明白我的意思。它非常适合台式机并提供许多功能,但是我觉得Windows服务器应被视为Windows服务器,而不是混混的Unix计算机(顺便说一句,我也反对OSX服务器,它们实际上是 Unix) 。无论如何,除非这是最后一个也是唯一的选择,否则我不想与Cygwin一起使用。

因此,我想问的是,是否有一种方法可以在Linux的Windows计算机上执行作业。没有Cygwin。我乐于接受各种想法和建议,包括“白痴,每个人都使用Cygwin,所以请认真对待并加以处理”。提前致谢!

Answers:


5

我花了数小时研究这个问题,最终归结为两个可行的选择(那里有很多不可行的选择):

  1. 用承载WebAPI的IIS服务构建Windows框,该WebAPI既已域化又已设置,以使WinRM会话可以正常工作。
  2. 西格温

使用第二个选项时,您将陷入GNU / Posix抽象层的争夺中,无法获得实际的Windows位。这确实限制了您的处理能力。

第一个选项几乎可以构建一个基于Web的抽象层,您可以在完整的本机堆栈Windows安装之上编写自己。如果您愿意进行工作,那么Linux主服务器只需执行大量curl调用即可完成所需的工作。不过,在脚本被抛弃的情况下,此方法最有效,因为构建回调系统需要付出更多的努力。


我担心第一个选择:-)那里有个大鲨鱼缸,里面满是问题,如果我做错了,也只是等着我。身份验证,错误解析,一般应用程序安全性等等等。但是感谢您的输入。我很高兴我不是唯一对此挂断电话的人。
马特·西蒙斯

2
@MattSimmons我在$ Job-1上做了类似的事情。IIS IP限制使许多操作变得更加容易。如果API调用只能来自一台主机,则可以大大降低攻击面。
sysadmin1138

我没有使用过它,但是据我了解,WinRM可以独立运行(无需IIS或自定义API)。使用限制性路由和kerberos身份验证,听起来(SOUNDS)好像很安全。有什么想法吗?
laughingbovine

@laughingbovine问题一直是WinRM支持。我提出的IIS方法允许PowerShell带有REST API,几乎所有东西都支持它。在某些地方几乎不支持WinRM支持。自从我写这篇文章以来的近三年中,这种支持可能已经从2012
sysadmin1138

3

您还可以购买跨平台的计划或工作流自动化软件,这些软件可以根据先前的操作甚至返回的结果在许多主机上启动本机脚本。大型企业使用诸如Tivoli,UC4,Espresso(现在是CA dSeries)之类的软件来执行此操作,而我已经在需要执行此类操作的大型企业中使用过该软件。仅供参考,这些通常对Oracle职位等内容具有本机支持,以使您大致了解价格。

(在我以前的工作中,他们仍然使用Cygwin ,因此当工作负载在平台之间移动时,他们可以使用相同的Perl脚本而无需进行修改。很有趣。)

您也可以尝试构建自己的系统,如@ sysadmin1138所建议;那将是一个有趣的项目,甚至可能最终变得足够强大以至于无法使用,并且当金融出口首次尝试失败时,您无法在凌晨2点被寻呼。


1
幸运的是,我不再传递财务数据了:-)这是大学的自动化。低得多的褶皱系数。
马特·西蒙斯

3

我将使用Powershell v3.0中引入的Powershell Web访问功能。这使您可以从Linux主机使用Powershell脚本。


2

使用PowerShell服务器,您可以SSH到Windows服务器并获得PowerShell控制台。除了免费试用版,我还没有使用过它,但是我的非正式使用向我证明了它是一个相当可靠的产品。


布雷,他们的定价是专为部署服务器使用而设计的,而不是“部署需要远程管理的所有内容”。可行,只是与Linux不同的模型。
sysadmin1138

2

以后总会有telnet的话,您之后的感觉如何?

认真地说,为什么您需要Linux服务器来调用PowerShell脚本?您是否可以重新设计工作流程,以便Linux服务器仅通过tftp将正确的boot.wim映像提供给PXE启动的主机?过去,我一直很幸运,将Windows映像和其他应答文件保留在Windows文件服务器上,并使用来自Linux主机的tftpd提供了自定义WinPE启动映像。然后,您可以让答案文件调用正确的PowerShell脚本,而不必像Cygwin这样处理跨平台的麻烦。


哦,只要那么简单。我不是在开玩笑15岁的perl部分。我来这里已经3个月了,我还不知道所有的互连如何“起作用”,但是我知道它们是多种多样的,其微妙之处使那些来这里多年的人们能够完全忽略内部开发的现有工具中已记录的功能,因为没有人确定它们是否/何时/如何调试。多毛的 修复这将是一个多年项目。
马特·西蒙斯

@MattSimmons我想我当时还不太了解这些要求:-)为什么Linux服务器需要调用PowerShell脚本?过去,我通过将机器供应信息保存在数据库中(可以由* nix服务器更新)来解决此要求,然后WinPE在确定要应用的答案文件时查询该数据库。当然,类似的东西可以适应几乎所有环境吗?基本上是您自己重新构建MDT
呵呵

每当运行新计算机脚本时,Windows端都需要发生某些情况(在某些情况下)。我可以从Windows端开始,但是那时候我需要为前端接口构建一个新的Web应用程序服务器,并且与Windows上的C#(或任何其他方式)相比,在Linux上使用PHP进行操作要舒适得多。 。但是就像我说的,如果必须,我必须。
Matt Simmons 2012年

2

您可以使用nrpe之类的方法在Windows主机上远程执行powershell脚本。您可能想要修改Powershell脚本以返回nrpe期望的退出代码,但是没有理由不能从Linux主机上的脚本中调用check_nrpe。


1
那真是违反直觉。我喜欢。这是一个主要的技巧,但还是很有创意!谢谢。
Matt Simmons


0

我在一个常见此问题的大型企业中工作。对于我们当前支持的流程,方法是让Unix系统对在IIS上运行ColdFusion的“管理” Windows服务器进行Web调用。我们有从GET请求触发的类和函数,这些请求使用“ cfexecute”指令启动特定的Powershell脚本。很难看,但是可以用。我们正在寻找Powershell v3 Web服务功能,以使ColdFusion不再充当中间人。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.