我有一个小脚本,用户输入脚本名称(描述名称),并可以选择修改属性。这是通过GUI界面完成的:文本框和一些下拉列表。 我尝试了几种方法来制作它,但它们都没有用。
以下是我检索服务信息的方法:
$thisservice = Get-WmiObject -Class Win32_Service -ComputerName $Server | Where { $_.displayName -eq $serviceBox.text }
我查看$server
计算机并将“服务显示名称”与文本框字段中包含的值匹配:$_.displayName -eq $serviceBox.text
。这很好用,如果我列出数据,我得到的服务控制台正是如下:.name,.description,.state,.startmode,.displayname
我将服务名称存储在变量中:
$servicename = $thisservice.name
我知道你不能启动服务,除非它是“手动”或“自动”,所以首先我把它设置为自动。在这里,我尝试了不同的方式但没有工作:
$servicename.ChangeStartMode("Auto")
和
Set-Service $servicename -StartupType Auto
然后我启动服务(但是即使我在自动格式化服务管理器上预设状态模式,这也不起作用):
$servicename.startservice()
此外$servicename.stopservcie()
失败。
我在两台不同的机器上试过这个,我有管理员权限,我尝试用管理员模式运行脚本,结果相同。我甚至直接从PS控制台尝试它,我无法改变服务状态! 我做错了什么?
答案 0 :(得分:3)
您的问题出在此处:$servicename = $thisservice.name
通过这样做,您将$servicename
设置为字符串,而不是服务对象。因此,您无法再在其上调用服务方法。
你应该能够做到:
$thisservice.ChangeStartMode("Automatic")
$thisservice.StartService()