如何在 PowerShell 中搜索名称中带有空格的服务?

如何在 PowerShell 中搜索名称中带有空格的服务?

我试图获取名称包含空格的服务列表,例如 SQL Server 服务。令我惊讶的是,以下语句没有返回单个记录。似乎空格具有特殊含义,并没有像我预期的那样按字面意思进行解析。

get-service | where-object name -match 'sql server'

PowerShell 匹配包含空格的字符串的规范方法是什么?

答案1

Windows 服务控制管理器 (SCM) 负责管理服务数据库。当您创建新服务时,使用命令行工具sc.exe或直接使用 SCM Windows API 调用,例如 (创建服务A) 您可以指定ServiceNameDisplayName

服务名称

要安装的服务的名称。最大字符串长度为 256 个字符。服务控制管理器数据库会保留字符的大小写,但服务名称比较始终不区分大小写。正斜杠 (/) 和反斜杠 () 不是有效的服务名称字符。

显示名称

用户界面程序用来识别服务的显示名称。此字符串的最大长度为 256 个字符。服务控制管理器中的名称保留大小写。显示名称比较始终不区分大小写。

如果您在注册表中查看由 SCM 维护的服务列表,您将看到ServiceName以下项下的值作为唯一值:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[服务名称]

当您使用 SC.exe 等工具或 VBScript、PowerShell 等脚本语言与 SCM 交互时,您通常(但并非总是)必须使用值ServiceName而不是DisplayName查询/停止/启动等......

当您查看 MMC 服务管理单元 (services.msc) 时,该Name列实际上是DisplayName服务的而不是值ServiceName

Services任务管理器中的选项卡确实显示了两者,但它仍然令人困惑,因为该列Description不是服务的描述(服务也可以有描述)而是ServiceName。可以理解它们混淆了。

相关内容