如何在非交互式PowerShell脚本中接收内联输入
解决StableNet下PowerShell脚本读取内联参数的问题
针对StableNet附加-noninteractive参数导致无法用Read-Host读取内联参数的问题,有两个直接可行的实现方案:
方案一:直接调用.NET Console.ReadLine方法
-noninteractive仅禁用PowerShell原生的交互式命令,.NET框架的System.Console类不受此限制,直接用[System.Console]::ReadLine()即可逐行读取StableNet传入的内联参数,逻辑和你C#实现完全一致:
# 逐行读取内联参数 $host = [System.Console]::ReadLine() $user = [System.Console]::ReadLine() $pass = [System.Console]::ReadLine() $filePath = [System.Console]::ReadLine() # 示例:验证读取结果 Write-Host "主机地址:$host" Write-Host "用户名:$user"
方案二:读取完整输入流后拆分参数
如果担心单行读取的边界问题,可以一次性读取所有输入内容,再按CR/LF拆分得到参数列表:
# 读取全部输入流 $allInput = [System.Console]::In.ReadToEnd() # 按CR/LF拆分并过滤空行 $params = $allInput -split "`r`n" | Where-Object { $_ -notmatch '^\s*$' } # 按索引提取参数 $host = $params[0] $user = $params[1] $pass = $params[2] $filePath = $params[3]
关于之前尝试失败的说明
你之前用[System.Console]::OpenStandardInput().Read()没成功,是因为这个方法仅读取单个字节,需要手动处理编码、拼接内容和识别换行符,复杂度远高于封装好的ReadLine()或ReadToEnd(),所以不推荐使用。
内容的提问来源于stack exchange,提问作者ThomasN
相关产品推荐
相关产品推荐

