Скрипт NSSM Powershell для Windows 2012 Server. Ошибка при создании службы

#powershell #nssm

#powershell #nssm

Вопрос:

У меня есть сценарий powershell для создания службы, которая работает на моем локальном компьютере с Windows 10. Приведенное ниже работает правильно.

 $nssm = (Get-Command nssm).Source
$serviceName = 'ImageResize'
$powershell = (Get-Command powershell).Source
$scriptPath = 'C:ImageTestScriptscurrentResizeImage.ps1'
$arguments = '-ExecutionPolicy Bypass -NoProfile -File "{0}"' -f $scriptPath
amp; $nssm install $serviceName $powershell $arguments
amp; $nssm status $serviceName
Start-Service $serviceName
Get-Service $serviceName
 

При попытке того же сценария на Windows 2012 server я получаю ошибки. Расшифровка показывает следующее:

 The expression after 'amp;' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.
At line:10 char:3
  amp; $nssm install $serviceName $powershell $arguments
    ~~~~~
      CategoryInfo          : InvalidOperation: (:) [], RuntimeException
      FullyQualifiedErrorId : BadExpression
 

Я также обнаружил следующее в средстве просмотра событий:

Приложение

 Failed to start service imagetest.  Program C:ImageResizeScriptResizeImage.ps1 couldn't be launched. CreateProcess()` failed: imagetest is not a valid Win32 application.
 

Система

 The system cannot find the specified path
 

Комментарии:

1. Правильно ли оба (Get-Command nssm).Source и Get-Command nssm работают на сервере 2012?

2. Я думаю, что нет. Get-Command nssm работает. Большое спасибо… В чем разница между ними?

3. Вероятно, вы видите различия из-за разных версий PowerShell. Либо примите сценарий и просто получите путь другим способом, либо обновите PowerShell до версии 5.1 на сервере: microsoft.com/en-us/download/details.aspx?id=54616

4. На самом деле кажется, что Get-Command при принудительном вводе строки, как это, вероятно, может сработать, может быть, это то, что вы имели в виду, оно работает как есть с just Get-Command nssm ?

5. Да, работал как Get-Command nssm