我已经编写了一个基本的PS脚本,以便卸载在文本文件($ servers)中定义的所有服务器上的文本文件($ appname)中定义的任何程序。PowerShell脚本从服务器列表中卸载多个程序
手动运行此命令,但没有变量,它可以正常工作,但是通过Jenkins或PS命令行运行脚本时,它只是挂起,所以我甚至无法调试,任何人有任何想法?
[array]$servers= Get-Content "D:\Jenkins\BuildUtilities\Citrix\CitrixServerList.txt"
[array]$appname= Get-Content "D:\Jenkins\BuildUtilities\Citrix\ProgramsList.txt"
ForEach($server in $servers) {
$prod=gwmi -ComputerName $server Win32_product | ?{$_.name -eq $appname}
$prod.uninstall()
}
澄清:通过运行手动我的意思是运行以下: gwmi -ComputerName CTX-12的Win32_Product | ?{_。Name -eq“Microsoft Word”}
Microsoft Word是一个示例。
编辑您的问题,以澄清到底什么“工作正常” - 你是什么运行“手动没有变量”?你是从你的工作站上运行的吗? Jenkins和您的工作站上的PS命令行,还是他们在不同的机器上? –
嗨迈克,请道歉请参阅我的编辑@ MikeSherrill'CatRecall' – jto
好吧,您可以开始添加线路,告诉您当前正在卸载哪个产品以查看它挂在哪个服务器和产品上,以查看是否存在趋势。 '$ appname'是一个数组。 '-eq'不是这种方式的数组运算符。你需要使用'-contains'或'-in'。此外,我不知道你是否可以一次调用'.Uninstall()'所有数组项目/一个好主意。 '$ appname -contains $ _。name'或'$ appname'只有一行吗? – Matt