首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Powershell不会使用nssm启动或停止Windows服务

Powershell不会使用nssm启动或停止Windows服务
EN

Stack Overflow用户
提问于 2020-08-13 15:35:34
回答 1查看 924关注 0票数 0

我有一个用powershell制作的脚本,我正在使用nssm创建一个服务,每次"x“都要执行,但是当启动该服务时,它会生成错误而不执行。我拥有完全的管理员权限,甚至试图以管理员身份运行PowerShell,但没有成功。

如果我直接运行脚本,它就能工作,但是使用nssm它不能工作。

发生的错误是:

启动-服务:服务“很好(很好)”开始失败。在C:\ Program \尼斯系统\ nssm.ps1: 10个字符: 14

ServiceCommandException

  • FullyQualifiedErrorId:
  • Start- <<<< $ serviceName
    • CategoryInfo: OpenError:(System.ServiceProcess.ServiceController: ServiceController) Start-Service,serviceName StartServiceFailed,Microsoft.PowerShell.Commands.StartServiceCommand

nssm.ps1

代码语言:javascript
运行
复制
$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

代码语言:javascript
运行
复制
$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
    }
EN

回答 1

Stack Overflow用户

发布于 2021-11-06 19:05:48

我相信我有一个类似的场景,我不能在竹文件系统运行时备份它。我的备份通过远程PowerShell从运行服务器执行,即使用户拥有本地管理权限,它也不能使用NSSM停止和启动服务。因此,我使用这个函数来运行提升的命令。

代码语言:javascript
运行
复制
ELEVAT "nssm stop bamboo"
tar --exclude=./logs --exclude=./temp --exclude=*.log --exclude=*.jar --verbose -czf E:\dropfolder\bamboo-home.tar.gz --directory=E:\bamboo-home .
ELEVAT "nssm start bamboo"

功能本身..。

代码语言:javascript
运行
复制
function ELEVAT ($command) {
    $scriptBlock = [scriptblock]::Create($command)
    configuration elevated {
        Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
        Set-StrictMode -Off
        Node localhost {
            Script execute {
                SetScript = $scriptBlock
                TestScript = {
                    if (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
                        Write-Verbose "Verified Elevated Session"
                        return $false
                    } else {
                        Write-Verbose "Not an Elevated Session!"
                        exit 9996
                    }
                }
                GetScript = { return @{ 'Result' = 'RUN' } }
            }
        }
    }
    $mof = elevated
    Start-DscConfiguration ./elevated -Wait -Verbose -Force
    if ( $error ) { Write-Host "[ELEVAT][WARN] `$Error[] = $Error" ; $Error.clear() 
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63398481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档