我正在尝试提出一个PowerShell进程来引用包含空格的服务路径。这是因为Qualys 105484。
我知道解析引擎很复杂,运行带有嵌入引号的cmd命令至少可以说是很困难的。我希望我离得很近,另一双眼睛会有所帮助。
我尝试从PowerShell运行的cmd命令是
sc create OcaLogSvc binpath= "\"C:\Program Files\AppRecovery\Agent\R3LogService\OcaLogSvc\""
下面是一些尝试和注解,每个尝试和注解显示了binPath的结果
$serviceName = "OcaLogSvc"
& sc.exe config $serviceName binPath= '""\""C:\Program Files\AppRecovery\Agent\R3LogService\OcaLogSvc\""""'
# ""C:\Program Files\AppRecovery\Agent\R3LogService\OcaLogSvc""
& sc.exe config $serviceName binPath= '""\""C:\Program Files\AppRecovery\Agent\R3LogService\OcaLogSvc""\""'
# ""C:\Program Files\AppRecovery\Agent\R3LogService\OcaLogSvc""
& sc.exe config $serviceName binPath= '"""\"C:\Program Files\AppRecovery\Agent\R3LogService\OcaLogSvc\""""'
# ""C:\Program Files\AppRecovery\Agent\R3LogService\OcaLogSvc""
& sc.exe config $serviceName binPath= "\C:\Program Files\AppRecovery\Agent\R3LogService\OcaLogSvc\"
# \C:\Program Files\AppRecovery\Agent\R3LogService\OcaLogSvc"
我通过运行
sc.exe qc $serviceName | sls "BINARY"
尝试了其他几种组合,但上面的那些是唯一成功的。
很可能我会给予,而是将一些字符串传输到.bat文件中,我可以调用这些文件。或者直接编辑注册表。我只是觉得这是有可能的。
我不能使用stop parsing参数,因为我打算在发现路径名时使用变量。我也只是大规模的目标命令,没有参数。我将手动解决这些问题,或者至少以另一种方式解决,而不是我在这里试图做的事情。
我还尝试通过Split-CommandLine
检查CommandLineToArgvW
的cmd字符串,但这些知识并没有很好地转化为上面的示例。
3条答案
按热度按时间hfwmuf9z1#
你似乎在寻找:
'"C:\Program Files\AppRecovery\Agent\R3LogService\OcaLogSvc"'
-这将导致字符串"C:\Program Files\AppRecovery\Agent\R3LogService\OcaLogSvc"
由于命令中的空格,您尝试修复的问题仅存在。另一个选择可能是使用旧的DOS名称
c:\progra~1\
或将应用程序安装到不包含空间的文件夹中,如C:\AppRecovery\Agent\R3LogService\OcaLogSvc
9jyewag02#
感谢您指出此document
我尝试使用
sc.exe
命令修改机器中的服务,但未能更新它,尽管命令成功运行!然后我想我们可以使用注册表项更新exe路径正如您现在所看到的,服务详细信息存在于注册表中的以下位置:
因此,为了使用报价更新您的服务,您只需使用命令
Set-Itemproperty
在注册表中更新它,如下所示:guykilcj3#
C:\Windows\system32〉sc config Pr_Ince1 binPath="“D:\IY In OUSS\test.exe”-XNInsce1 -K
[SC]ChangeServiceConfig成功
例如:“slash“D:\ path here”