用户输入以执行操作

时间:2016-01-31 20:27:57

标签: powershell powershell-remoting

我正在构建一个我希望允许用户输入采取行动的脚本。

目前,此工具可以检查所有远程服务器是否有任何自动停止的服务。我不希望脚本自动启动它们。我希望用户输入什么来启动这些服务。

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循环来实现这个目标,但是永远不能让它工作。

1 个答案:

答案 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() }