【问题标题】:Creating a MongoDB windows service via PowerShell with a custom bin path / config通过 PowerShell 使用自定义 bin 路径/配置创建 MongoDB Windows 服务
【发布时间】:2020-11-06 09:16:33
【问题描述】:

我目前在从 powershell 调用 sc.exe 创建调用(以创建 Windows 服务)时遇到问题。

我正在尝试使用一系列自定义参数为 mongodb 服务创建 Windows 服务包装器。

$ServiceName = "MyMongoDb"
$DisplayName = "My MongoDb Service"
$mediaPath = "C:\Program Files (x86)\Company\Product"
$ConfigPath = ("{0}\MongoDb\mongod.cfg" -f $mediaPath)
$TargetPath = ("{0}\MongoDb\bin\mongod.exe" -f $mediaPath) 
$cmd = 'sc.exe create "{0}" binpath= ""{1}" --service --config="{2}"" displayname= "{3}" start= "auto"' -f $ServiceName,$TargetPath,$ConfigPath,$DisplayName
iex $cmd | Tee-Object  ("{0}\output.txt" -f $mediaPath) 
Write-Host 'Created Service...'

我遇到的问题是 powershell 失败并出现以下错误 -

x86 : The term 'x86' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path 
is correct and try again.
At line:1 char:56
+ sc.exe create "MyMongoDb" binpath= ""C:\Program Files (x86)\Company\Product\Mong ...
+                                                        ~~~
    + CategoryInfo          : ObjectNotFound: (x86:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

实际上,它不会将 bin 路径视为单个字符串。我试图以各种不同的方式转义字符串,包括使用 ' 和 "" 但无济于事。

任何帮助将不胜感激。

TYVM

【问题讨论】:

    标签: mongodb powershell windows-services


    【解决方案1】:

    您的问题是因为您需要从 PowerShell 运行 cmdlet 的嵌套引号。

    最终您尝试使用 sc.exe 创建服务并且您的 bin 参数包含空格,因此您必须使用反斜杠“转义内引号”。More info here

    在 cmd 中这一切都很好,但你不在 cmd 中你在 PowerShell 中。

    powershell 处理转义字符的方式与 cmd 略有不同,因此传递给 sc.exe 的内容会导致错误,因此您需要从 cmd 运行它。 (cmd.exe --% /c),我还把整个内容放在了 HERE-STRING 中,这样就可以按字面意思解释了。

    $ServiceName = "MyMongoDb"
    $DisplayName = "My MongoDb Service"
    $mediaPath = "C:\Program Files (x86)\Company\Product"
    $ConfigPath = ("{0}\MongoDb\mongod.cfg" -f $mediaPath)
    $TargetPath = ("{0}\MongoDb\bin\mongod.exe" -f $mediaPath)  
    $cmd = @"
    cmd.exe --% /c sc.exe create "$ServiceName" binpath= "\"$TargetPath\" --service --config=\"$ConfigPath\"" displayname= "$DisplayName" start= "auto"
    "@
    Write-Host $cmd
    iex $cmd | Tee-Object  ("{0}\output.txt" -f $mediaPath) 
    Write-Host 'Created Service...'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多