【发布时间】:2020-08-13 15:35:34
【问题描述】:
我有一个在 powershell 中制作的脚本,我正在使用 nssm 创建一个服务,每“x”时间执行一次,但是在启动服务时它会产生错误并且不会执行。 我拥有完整的管理员权限,我什至尝试以管理员身份运行 PowerShell,但没有成功。
如果我直接运行脚本,它可以工作,但是使用 nssm 就不能工作。
发生的错误是这样的:
Start-Service: Service 'nice (nice)' 启动失败。 在 C:\Program Files\NICE Systems\nssm.ps1:10 char:14
- 启动服务
- CategoryInfo: OpenError: (System.ServiceProcess.ServiceController: ServiceController) [Start-Service], 服务命令异常
- FullyQualifiedErrorId:StartServiceFailed,Microsoft.PowerShell.Commands.StartServiceCommand
nssm.ps1
$nssm = (Get-Command nssm.exe).Definition
$serviceName = 'nice'
$powershell = (Get-Command powershell.exe).Definition
$scriptPath = 'C:\Program Files\NICE Systems\script_delecao.ps1'
$arguments = '-ExecutionPolicy Bypass -NoProfile -File "{0}"' -f $scriptPath
& $nssm install $serviceName $powershell $arguments
& $nssm status $serviceName
Start-Service $serviceName
Get-Service $serviceName
script_delecao.ps1
$logPath = "C:\Program Files\NICE Systems\Logs\*\Archive\*"
# -------------------------------------------------------------------------------------------
# SET $NDAYS WITH THE NUMBER OF DAYS TO KEEP IN LOG FOLDER.
$nDays = 180
# -------------------------------------------------------------------------------------------
# SET $EXTENSIONS WITH THE FILE EXTENSION TO DELETE.
# YOU CAN COMBINE MORE THAN ONE EXTENSION: "*.LOG, *.TXT,"
$Extensions = "*.log*"
# -------------------------------------------------------------------------------------------
# PAY ATTENTION! IF YOU COMBINE MORE THAN ONE LOG PATH AND EXTENSIONS,
# MAKE SURE THAT YOU ARE NOT REMOVING FILES THAT CANNOT BE DELETED
# -------------------------------------------------------------------------------------------
$PathDelete = "C:\Program Files\NICE Systems\Delecoes"
while ($true) {
If(!(test-path $PathDelete))
{
New-Item -ItemType Directory -Force -Path $PathDelete
}
$LogDate = (Get-Date).ToString("dd_MM_yyyy")
$DateTime = (Get-Date).ToString("yyy-MM-ddThh:mm:ss")
$Files = Get-Childitem $LogPath -Include $Extensions -Recurse | Where `
{$_.LastWriteTime -le (Get-Date).AddDays(-$nDays)}
foreach ($File in $Files)
{
if ($File -ne $NULL)
{
$Log = $DateTime + " - O arquivo " + $File + " foi deletado "
$Log | Out-File -Append $PathDelete\DeleteLogFile_$LogDate.log
Remove-Item $File.FullName| out-null
}
}
# Add a sleep at the end of the loop to prevent the script from eating
# too much CPU time
$Log = $DateTime + " FINAL DO ARQUIVO "
$Log | Out-File -Append $PathDelete\DeleteLogFile_$LogDate.log
Start-Sleep -Seconds 300
}
【问题讨论】:
-
欢迎来到 SO。
nssm.ps1看起来像一个糟糕的复制粘贴。显示的错误是第 10 行的Start-Service,但我在第 8 行看到它。此外,nssm.ps1的第一行在 nssm 之前缺少$。当您指出“如果我直接运行脚本它可以工作”时,您指的是 nssm.ps1 还是 script_delecao.ps1 脚本?当您指出“但是使用 nssm 无法正常工作”时,您指的是 nssm.exe 还是 nssm.ps1? -
这个错误听起来确实像 PowerShell 没有以管理员身份运行,或者帐户上下文不允许启动服务。退房this article。
-
nssm.ps1 脚本行已修复,我以管理员身份运行但仍无法正常工作。 ""如果我直接运行脚本就可以了",你指的是 nssm.ps1 还是 script_delecao.ps1 脚本?"通过 script_delecao.ps1 如果我运行 nssm.ps1 脚本,它会调用 nssm.exe 可执行文件,但它仍然返回执行错误。
-
我在 Windows 10 上进行了测试并得到了相同的行为:D:\ProgramFiles\Nice Systems> .\nssm.ps1 服务“nice”安装成功! SERVICE_STOPPED 启动服务:Falha ao iniciar o serviço 'nice (nice)'。没有 D:\ProgramFiles\Nice Systems\nssm.ps1:8 caractere:1 + Start-Service $serviceName + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service], ServiceCommandException + FullyQualifiedErrorId : StartServiceFailed,Microsoft.PowerShell.Commands.StartServiceCommand
标签: powershell