获取powershell的服务问题

获取powershell的服务问题,powershell,Powershell,出于某种原因,当我在powershell中运行Get Service时,它会抛出一个错误。但是,如果我先运行Set Service,Get Service将一直工作,直到我再次打开powershell。我似乎在网上找不到这个问题。是否有人经历过这种情况,如果有,是否有解决方案 错误:“程序'Get Service'无法运行:没有应用程序与此操作的指定文件关联,行:1 char:1” tl;dr 从系统中删除文件C:\Windows\System32\Get Service——它不应该在那里 之后

出于某种原因,当我在powershell中运行
Get Service
时,它会抛出一个错误。但是,如果我先运行
Set Service
Get Service
将一直工作,直到我再次打开powershell。我似乎在网上找不到这个问题。是否有人经历过这种情况,如果有,是否有解决方案

错误:“程序'Get Service'无法运行:没有应用程序与此操作的指定文件关联,行:1 char:1”

tl;dr

从系统中删除文件
C:\Windows\System32\Get Service
——它不应该在那里

之后,
Get Service
将再次开始工作


如果您尚未在会话中导入模块
Microsoft.PowerShell.Management
,PowerShell将首先尝试打开系统上可能意外创建的、无扩展名的
C:\Windows\System32\Get Service
文件。

  • PowerShell试图打开它通过
    $env:PATH
    找到的不可执行文件(一个没有文件扩展名的文件),这本身就有问题-请参阅
Microsoft.PowerShell.Management
模块包含
Get Service
Set Service
cmdlet(以及其他命令),通常在您第一次尝试在会话中执行其中一个命令时按需导入

从技术上讲,由于模块位于已知位置,因此它受到限制

但是,如果模块尚未导入,则位于环境变量
$env:PATH
中列出的目录之一中的同名外部程序/文档文件优先,默认情况下执行/打开该文件。

由于您案例中的文件没有文件扩展名,Windows shell不知道如何打开它,导致出现错误消息(如果您在文件资源管理器中双击该文件,则会出现“如何打开此文件?”对话框)

因此,尝试单独执行名为
Get Service
的命令不会触发导入
Microsoft.PowerShell.Management
模块-外部文件不断被调用

相反,由于
Set-Service
cmdlet不受外部文件的影响,因此调用它会隐式导入模块

导入模块后,提交命令
获取服务
将调用cmdlet而不是外部文件
,因为随后,cmdlet将优先于具有相同名称的外部程序

虽然这种情况下的区别使执行行为难以预测,但出于性能原因,始终优先考虑已知cmdlet,而不管其模块是否已导入当前会话,这不是一种选择:请参阅中的讨论


要明确地从给定模块调用命令,请在命令名前加上模块名,然后加上
\

也就是说,即使没有导入模块,您也可以按如下方式调用
Get-Service
cmdlet:

Microsoft.PowerShell.Management\Get-Service

您为设置服务提供的服务的名称是什么?设置服务后,
(Get命令Get service)。Source
返回什么?@EylM我没有提供任何内容。然后它会提示输入名称,我只需按enter键。之后,Get服务开始工作。@sodawillow由于某种原因,它返回“C:\Windows\System32\Get Service”。运行Set服务后,它返回“Microsoft.PowerShell.Management”。您的
C:\Windows\System32
文件夹是否包含
Get Service
文件?