调用Get-Service时过滤服务

时间:2008-12-05 19:52:39

标签: powershell

我过去做过这个,并且记不起正确的命令(我想我是在使用instring或soemthign?)

我想列出所有运行中包含“sql”字样的Windows服务。

列出所有Windows服务:

Get-Service

是否有instring函数可以执行此操作?

5 个答案:

答案 0 :(得分:18)

Get-Service -Name *sql*

更长的选择是:

Get-Service | where-object {$_.name -like '*sql*'}

许多cmdlet提供内置过滤和支持通配符。如果您查看帮助文件(Get-Help Get-Service -full),您将看到

 -name <string[]>
     Specifies the service names of services to be retrieved. Wildcards are
     permitted. By default, Get-Service gets all of the services on the comp
     uter.

     Required?                    false
     Position?                    1
     Default value                *
     Accept pipeline input?       true (ByValue, ByPropertyName)
     Accept wildcard characters?  true

通常,如果cmdlet内置了过滤功能,那么这是首选方法,因为它通常更快,更高效。
在这种情况下,可能没有太多的性能优势,但在V2中,您可以从远程计算机中提取服务并进行过滤,这将是首选方法(将较少的数据发送回调用计算机)。 / p>

答案 1 :(得分:4)

您可以获取所有正在运行且具有单词sql的服务。

 Get-Service | Where-Object {$_.Status -eq "Running"} | Where-Object {$_.Name -like "*sql*"}

如果您想了解更多信息,请看这个(差别不大) http://nisanthkv.blog.com/2012/06/29/get-services-using-powershell

希望它有所帮助...

答案 2 :(得分:2)

请输入以下命令:

Sub CopyCopy()

    Dim rngUsed As Range, rngCopy As Range
    Dim sht As Worksheet

    Set sht = Sheets("All Data")


    sht.Range("A1").AutoFilter '<<clear any previous filtering
    Set rngUsed = sht.Range("A1").CurrentRegion

    rngUsed.AutoFilter Field:=10, Criteria1:= _
        "=*Criteria2*", VisibleDropDown:=False

    On Error Resume Next
    With rngUsed.Offset(1, 0).Resize(rngUsed.Rows.Count - 1)
        'any visisble rows?
        Set rngCopy = .SpecialCells(xlCellTypeVisible)
    End With
    On Error GoTo 0

    If Not rngCopy Is Nothing Then
        rngCopy.Copy Sheets("Criteria2").Range("A2")
        rngCopy.Delete Shift:=xlUp
        Set rngCopy = Nothing '<<< clear range variable
    End If
    sht.Range("A1").AutoFilter '<<clear any filtering

    'repeat with other criteria or create a loop

End Sub

答案 3 :(得分:0)

以上答案很不错,但这更有用:

Get-WmiObject -ComputerName <INSERT COMPUTER NAME> -Class Win32_Service | where-object {$_.name -like '*sql*'}

它允许在远程计算机上进行此查询。

答案 4 :(得分:0)

搜索字符串可能在显示名称或服务名称中(例如,在"*SQL*"的服务名称搜索中不包括SQL Integration Services ...),因此我同时过滤了这两个内容:

get-service | Where-Object {$_.DisplayName -like "*MySearchString*" -or $_.ServiceName -like "*MySearchString*"}