执行操作的用户输入

User input to perform action

我正在构建一个脚本,我希望允许用户输入以执行操作。

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

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 循环来实现这个,但永远无法让它工作。

您可能想使用 Get-WmiObject 而不是 Get-CimInstance,将匹配的服务收集到哈希表中,然后使用 -PassThru 选项将列表传递到 Out-GridView。 gridview 将 return 仅显示用户选择的对象,您可以使用这些对象对哈希表中的服务对象调用 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() }