PowerShell每行输入后返回信息及通配符自定义函数实现咨询
PowerShell 交互式输入反馈与通配符Ping函数实现
嘿,这两个需求在PowerShell里都完全能实现,甚至比你想的更灵活!咱们一个个来拆解:
问题1:每行输入后即时返回信息的自定义函数
当然可以实现交互式的逐行输入反馈,这在PowerShell脚本/函数开发里是很常见的场景。核心思路就是用循环读取输入,每次处理后立即输出结果,完全适配你后续的自定义逻辑扩展。
比如下面这个示例函数,实现了逐行输入计算机名后即时返回Ping结果:
function Invoke-LineInputPing { [CmdletBinding()] param() Write-Host "`nEnter computer names one by one (type 'exit' to quit)`n" -ForegroundColor Cyan do { $target = Read-Host "👉 输入目标计算机名" if ($target -eq 'exit') { Write-Host "`n退出程序..." -ForegroundColor Yellow break } # 这里替换成你的自定义逻辑,比如Ping、端口检测等 $pingStatus = Test-Connection -ComputerName $target -Count 1 -Quiet -ErrorAction SilentlyContinue if ($pingStatus) { Write-Host "✅ $target 可连通" -ForegroundColor Green } else { Write-Host "❌ $target 无法连通或无效" -ForegroundColor Red } Write-Host "---`n" } while ($true) }
调用这个函数后,你每输入一行计算机名,它就会立刻返回Ping结果,完全满足你“每行输入后返回信息”的需求,而且你可以把中间的Ping逻辑替换成任何你需要的自定义操作(比如查询AD信息、检测服务状态等)。
问题2:支持通配符前缀的自定义Ping函数
即使上面的交互式方案完全可行,支持通配符的批量处理函数也是非常实用的,尤其是需要一次性处理一组前缀固定的计算机时。
下面是一个支持通配符前缀的Ping函数示例,既可以手动指定带通配符的名称,也可以结合域环境自动获取符合前缀的计算机:
function Get-PingByPrefix { [CmdletBinding()] param( [Parameter(Mandatory=$true, HelpMessage="输入计算机名前缀,支持通配符,比如'PC-*'")] [string]$ComputerPrefix ) # 场景1:域环境下自动获取符合前缀的计算机 # 如果你在域环境中,可以取消下面的注释,直接从AD拉取匹配的计算机 # try { # $computers = Get-ADComputer -Filter "Name -like '$ComputerPrefix'" | Select-Object -ExpandProperty Name # } catch { # Write-Warning "无法连接到AD,请检查权限或使用非域模式" # $computers = @() # } # 场景2:非域环境下,手动生成或使用通配符匹配已知列表 # 示例:如果前缀是"PC-",生成PC-1到PC-20的列表;或者直接用用户输入的通配符匹配本地列表 if (-not $computers) { # 这里可以替换成你的计算机名生成逻辑,或者读取本地配置文件中的列表 $computers = 1..20 | ForEach-Object { "$($ComputerPrefix.TrimEnd('*'))$_" } } # 批量执行Ping并返回结构化结果 foreach ($computer in $computers) { $pingResult = Test-Connection -ComputerName $computer -Count 1 -Quiet -ErrorAction SilentlyContinue [PSCustomObject]@{ ComputerName = $computer IsReachable = $pingResult CheckTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" } } }
使用示例:
# 输入前缀"PC-",自动Ping PC-1到PC-20 Get-PingByPrefix -ComputerPrefix "PC-" # 直接使用通配符,比如匹配所有以"SRV-"开头的计算机 Get-PingByPrefix -ComputerPrefix "SRV-*"
这个函数返回的是结构化的对象,你可以直接导出到CSV、筛选结果或者做后续的自动化处理,比交互式输入更适合批量场景。
内容的提问来源于stack exchange,提问作者f3nr1r
相关产品推荐
相关产品推荐

