Command.startservice()在Powershell中不工作

Command.startservice()在Powershell中不工作,powershell,service,Powershell,Service,我有一个小脚本,用户在其中输入脚本名称(描述名称),并可以选择修改属性。这是通过GUI界面完成的:一个文本框和一些下拉列表。 我尝试了几种方法,但没有一种奏效 以下是检索服务信息的方式: $thisservice = Get-WmiObject -Class Win32_Service -ComputerName $Server | Where { $_.displayName -eq $serviceBox.text } 我查看$server计算机,将“服务显示名称”与文本框字段中包

我有一个小脚本,用户在其中输入脚本名称(描述名称),并可以选择修改属性。这是通过GUI界面完成的:一个文本框和一些下拉列表。 我尝试了几种方法,但没有一种奏效

以下是检索服务信息的方式:

$thisservice = Get-WmiObject -Class Win32_Service -ComputerName $Server | Where {     $_.displayName -eq $serviceBox.text }
我查看
$server
计算机,将“服务显示名称”与文本框字段中包含的值进行匹配:
$\uuuu.displayName-eq$serviceBox.text
。如果我列出的数据与服务控制台中的数据完全相同,则此操作效果良好:.name、.description、.state、.startmode、.displayname

我将服务名称存储在变量中:

$servicename = $thisservice.name
我知道你不能启动一个服务,除非它是“手动”或“自动”,所以首先我把它设置为自动。在这里,我尝试了不同的方法,但都没有奏效:

$servicename.ChangeStartMode("Auto")

然后启动服务(但即使我在“服务管理器”的“自动表单”上预设了状态模式,这也不起作用):

另外,
$servicename.stopservcie()
也会失败

我在两台不同的机器上尝试了这个,在这两台机器上我都有管理员权限,我尝试用管理员模式运行脚本,结果相同。我甚至直接从PS控制台尝试过,但我无法更改服务状态!
我做错了什么?

您的问题在这里:
$servicename=$thisservice.name

通过这样做,您可以将
$servicename
设置为字符串,而不是服务对象。因此,您不能再对其调用服务方法

你应该能够做到:

$thisservice.ChangeStartMode("Automatic")
$thisservice.StartService()

好啊我不知道。非常感谢。我刚试过你的版本,结果也一样。我的测试是笔记本电脑上的“传真”服务。目前处于“停止”和“手动”状态。在我运行脚本之后,它是相同的。系统是否真的不允许我更改状态?请确保changestartmode是
自动
而不是
自动
。更改启动模式可在我的机器上运行,但即使通过服务控制台,服务也不会启动,因为它会因未使用而立即停止。所以,也许检查一下它会通过服务启动。我尝试了另一种服务。至少现在开始起作用了。起动模式仍保持手动。是否有可能捕获windows在服务自动停止时返回的消息?我对此表示怀疑,因为它实际上启动了,所以您也无法检查返回代码是否有错误。我能想到的唯一方法是在启动后检查状态,但进入“运行”状态需要任意的时间,所以很难完全做到这一点。
$servicename.startservice()
$thisservice.ChangeStartMode("Automatic")
$thisservice.StartService()