【问题标题】:Differentiate service state区分服务状态
【发布时间】:2013-09-09 02:09:44
【问题描述】:

我正在尝试导入具有服务名称的文本文件,启动处于已停止状态的服务,然后将结果输出到文本文件。导入和启动服务不是问题。但是,在最终的文本文件中,我想区分开始状态为 Started 的服务。

最后我想要一个包含服务列表的文本文件:

  • 服务 1 由脚本启动
  • 服务 2 已启动
  • 服务 3 等等...

我的想法是导入文本文件,检查状态并将其输出到新的文本文件。然后我会将 Stopped 更改为 Started by script。但是,我不能总是保证服务会启动,所以这将是一种快速而肮脏的方法。

有没有办法区分这两者?

【问题讨论】:

  • 您这样做是为了解决什么问题?服务由操作系统管理,启动模式为“auto”的服务应该会自动启动。如果他们不这样做,通常是您应该调查的问题。不要尝试实现自己的服务管理。
  • 我猜更多的是概念验证类型的交易......

标签: powershell powershell-2.0 powershell-3.0


【解决方案1】:

我将使用Get-Service 从列表中检索服务并添加自定义属性来指示服务是否由脚本启动:

$f = 'C:\services.txt'
$svc = Get-Content $f | Get-Service | % {
  $_ | Add-Member 'StartedByScript' $false
  $_
}

如果您想跳过不存在的服务而不显示错误消息,请将-ErrorAction SilentlyContinue 添加到Get-Service

使用该服务列表,您可以像这样以Stopped 状态启动服务:

$svc | ? { $_.Status -eq 'Stopped' } | % {
  $_.Start 
  $_.StartedByScript = $true
}

自定义属性StartedByScript表示脚本启动了哪个服务:

$svc | select DisplayName, Status, StartedByScript

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-30
    • 2020-09-07
    • 2018-07-24
    • 2016-08-03
    • 2016-10-12
    • 1970-01-01
    • 2017-05-24
    • 2014-02-08
    相关资源
    最近更新 更多