#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