区分服务状态

时间:2013-09-08 14:21:40

标签: powershell powershell-v2.0 powershell-v3.0

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

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

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

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

有没有办法区分这两者?

1 个答案:

答案 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