执行操作的用户输入
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() }
我正在构建一个脚本,我希望允许用户输入以执行操作。
目前此工具可以检查所有远程服务器是否有任何自动停止的服务。我不希望脚本自动启动它们。我希望用户输入什么来启动这些服务。
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() }