You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:43:29