【发布时间】:2015-12-24 10:29:38
【问题描述】:
我正在拼命尝试将参数从批处理文件传递到 PowerShell 脚本,该脚本检查 Windows 服务是否正在运行。
这是我的完整操作命令:
.\nsrservices.ps1 -cmd running nsrexecd,stisvc
但问题在于命令的行为:
- 在 PowerShell 窗口中,服务名称被视为两个(或更多),因此检查“nsrexecd”然后检查“stisvc”
- 在批处理文件中,服务名称作为唯一值传递给 PowerShell,从而检查“nsrexecd,stisvc”
这是我的 bat 文件:
powershell.exe -File .\nsrservices.ps1 -cmd running nsrexecd,stisvc
ECHO.%ERRORLEVEL%
exit /B %ERRORLEVEL%
在我的 PS 文件中,参数是这样定义的:
param([string]$cmd=$(throw "Type d'action manquante !"),[string[]]$srv)
在一个日志文件中,我得到了这两个结果(抱歉法语输出)。
从 PowerShell 窗口:
24/12/2015 09:02:50-Paramètres appelés : cmd=running srv=stisvc nsrexecd
24/12/2015 09:02:50-Début test de l'état running du service : stisvc
24/12/2015 09:02:50- Début évaluation de l'état du service : stisvc
24/12/2015 09:02:50- Fin évaluation de l'état du service : stisvc
24/12/2015 09:02:50-Le service tourne
24/12/2015 09:02:50-Fin test de l'état running du service : stisvc
24/12/2015 09:02:50-Début test de l'état running du service : nsrexecd
24/12/2015 09:02:50- Début évaluation de l'état du service : nsrexecd
24/12/2015 09:02:50- Fin évaluation de l'état du service : nsrexecd
24/12/2015 09:02:50-Le service tourne
24/12/2015 09:02:50-Fin test de l'état running du service : nsrexecd
这意味着服务是按顺序测试的
来自 .bat 文件:
24/12/2015 09:04:24-Paramètres appelés : cmd=running srv=nsrexecd,stisvc
24/12/2015 09:04:24-Début test de l'état running du service : nsrexecd,stisvc
24/12/2015 09:04:24- Début évaluation de l'état du service : nsrexecd,stisvc
24/12/2015 09:04:24- Le service nsrexecd,stisvc n'existe pas !
24/12/2015 09:04:24- Fin évaluation de l'état du service : nsrexecd,stisvc
24/12/2015 09:04:24-Fin test de l'état running du service : nsrexecd,stisvc
这意味着名为“nsrexecd,stisvc”的服务不存在。
我的两个名字之间的逗号在使用 .bat 文件时似乎会引起混淆
所以我正在竭尽全力寻找解决方法来战胜这个该死的 .bat 文件。
我试过引号、单引号、-File、-Command,但没有成功。
任何线索或解决方案将不胜感激,因为我在这个论坛上的研究没有给我有用的东西。
当然,在那之后我想调用带有参数的.bat文件。
【问题讨论】:
-
您可以做的一件事是不要在批处理调用中使用逗号,并将 $srv 的参数更改为
ValueFromRemainingArguments=$true。你可以在这里看到更多technet.microsoft.com/en-us/library/hh847743.aspx。或者只是将其作为单个字符串引入并使用-split "," -
为什么要从批处理文件中调用 PowerShell 脚本?直接从 PowerShell 运行即可。
-
@Bill_Stewart:我的问题是关于在 .bat 文件中包含 PowerShell,因为我必须这样做。该脚本从一个正在运行的程序启动,该程序不接受除 .bat 和 .cmd 文件之外的其他内容...
-
.cmd和.bat文件不可独立执行;您必须使用cmd.exe运行它们。 -
@Bill_Stewart :对不起,我想说我的程序只能启动 cmd.exe
标签: powershell batch-file