0

我有一个获取 Windows Print Spooler 实际名称的 PowerShell 脚本

$serviceDisplayName = "Print Spooler"
$actualServiceName = (Get-Service -DisplayName "$serviceDisplayName").Name

我可以准确地找出打印后台处理程序是否正在运行:

Try
{
    $serviceInqResults = get-service -Name $actualServiceName -ErrorVariable err
}

Catch 
{
    write-output "An exception occurred while trying to see if $serviceDisplayName were running or not."
    write-output $err
}

但是,当我尝试通过它的真实名称或显示名称重新启动打印后台处理程序时,我得到了同样的错误:

if($serviceInqResults.Status -ne "Running")
{
    write-output "The service is not running. Starting the $serviceDisplayName "

   try
   {
        Start-Service -Name $actualServiceName -ErrorVariable err
   }
    
    Catch
    {
        write-output $err
    }


Service 'Print Spooler (Spooler)' cannot be started due 
to the following error: Cannot open Spooler service on computer '.'.

我尝试使用名称“Print Spooler”、“Spooler”、“Print Spooler (Spooler)”启动服务,但都出现相同的错误,但我可以在服务控制管理器(服务)中启动它。

我想知道我错过了什么。

4

2 回答 2

2

我不明白为什么你的代码不起作用。[脸红] 但是,以下适用于我的 win10、20h2 安装,同时运行提升...

$PrintSpooler = Get-Service -Name Spooler
$PrintSpooler

if ($PrintSpooler.Status -eq 'running')
    {
    Stop-Service -InputObject $PrintSpooler
    }

Get-Service -Name Spooler
Start-Service -Name Spooler
Get-Service -Name Spooler

输出 ...

Status   Name               DisplayName
------   ----               -----------
Running  Spooler            Print Spooler
Stopped  Spooler            Print Spooler
Running  Spooler            Print Spooler
于 2021-01-14T21:54:14.917 回答
0

使用使用-InputObject 的@Lee_Dailey 的示例,这将返回 Spooler,而不是 Print Spooler(谢谢,Lee)

PS C:\Users\fred> Get-Service -InputObject "Print Spooler"

Status   Name               DisplayName
------   ----               -----------
Running  Spooler            Print Spooler


PS C:\Users\fred>
于 2021-01-15T13:43:32.837 回答