我正在构建一个我希望允许用户输入采取行动的脚本。
目前,此工具可以检查所有远程服务器是否有任何自动停止的服务。我不希望脚本自动启动它们。我希望用户输入什么来启动这些服务。
Write-Host "Checking for Stopped Services..."
$stoppedServices = Invoke-Command $Servers {
Get-CimInstance Win32_Service -ComputerName $Servers -Filter "startmode = 'auto' AND state != 'running'" |
Sort state | select name, state
} -Credential $Credential
if ($stoppedServices -ne $null) {
Clear-host
$stoppedServices
} else {
Clear-Host
Write-Host ("No stopped services found!")
}
因此用户可以查看已停止的服务。我想做两件事。使用该选项写出已停止的服务,是否要启动这些已停止的服务?
使用该选项,然后退出或启动服务。我想我可以通过另一个foreach
循环来实现这个目标,但是永远不能让它工作。
答案 0 :(得分:0)
您可能希望使用Get-WmiObject
而不是Get-CimInstance
,在哈希表中收集匹配的服务,并使用Out-GridView
选项将列表传递到-PassThru
。 gridview将仅返回用户选择的对象,您可以使用这些对象在哈希表中的服务对象上调用StartService()
方法。
$svc = @{}
Get-WmiObject Win32_Service -Computer $Servers -Credential $Credential -Filter "startmode = 'auto' AND state != 'running'" |
ForEach-Object { $svc[$_.DisplayName] = $_ }
$svc.Values | Select-Object SystemName, DisplayName, State |
Sort-Object State, SystemName, DisplayName |
Out-GridView -PassThru |
ForEach-Object { $svc[$_.DisplayName].StartService() }