首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >静默bat文件执行powershell命令

静默bat文件执行powershell命令
EN

Stack Overflow用户
提问于 2020-10-24 05:39:21
回答 2查看 937关注 0票数 0

我们有一个作为服务运行的应用程序服务器,当加载一些配置时,它会启动一个bat脚本,该脚本必须运行powershell命令Stop-ClusterGroup DRMSERVICES,然后再次启动它。这个bat文件在我手动执行它的时候工作得很完美。但是,当服务正在运行bat时,它不会结束,也不会执行powershell命令。

Bat文件如下所示

@echo off

powershell -command Stop-ClusterGroup DRMSERVICES

powershell -command Start-ClusterGroup DRMSERVICES

该服务以静默模式运行bat文件,这是其主要区别。我尝试了各种开关,包括-ExecutionPolicy UnrestrictedSTART /wait等,创建了一个单独的ps1文件,并让bat执行此文件。都有相同的输出:手动执行bat工作当服务执行bat时,它不工作。

我知道bat文件是由服务执行的,因为插入NET STOP servicename是正确的。

在powershell事件查看器中,我还可以看到powershell命令发生的事件。在事件查看器中手动执行命令和让服务执行命令之间的区别是事件id 800,它说明了当服务执行bat时不存在的关于“执行管道”的信息。

该服务不会等待powershell,因此它没有时间在退出之前停止集群。

我不知道这是权限问题、语法错误还是其他什么问题。

希望有人能帮上忙

更新:我已经尝试了所有建议的解决方案,结果都是一样的,双击时bat文件可以工作,但服务不执行powershell命令。执行纯cmd,因为我可以通过管道连接到txt文件。我甚至在尝试runas时发现输出日志文本写着“插入管理员密码”。

我甚至设法让我们的软件工程师更改了我们的软件,直接调用powershell而不是bat,同样的结果。Powershell不会执行该命令,这告诉我这可能是权限问题,但为了成功,一切都设置为以管理员身份登录并以管理员身份运行,但仍然什么都没有。

EN

Stack Overflow用户

回答已采纳

发布于 2020-10-27 19:54:19

我解决了这个问题。因为该服务是32位进程,所以它将执行32位powershell。FailoverClusters模块仅作为64位模块存在。通过使用%SystemRoot%\sysnative\WindowsPowershell\v1.0\powershell.exe,该服务能够打开64位会话,从而使用故障转移群集模块。

作为附注,sysnative文件夹仅在32位会话中可见,因此无法在64位操作系统中通过浏览找到它。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64507619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档