如何阻止PowerShell 5.1将Read-Host输入中的换行识别为回车
解决PowerShell控制台多行粘贴读取问题
方法一:禁用多行粘贴警告并改用多行输入读取
默认PowerShell控制台的多行粘贴警告可通过修改注册表禁用,同时替换原有函数为支持多行输入的逻辑:
- 禁用粘贴警告(需管理员权限执行):
Set-ItemProperty -Path 'HKCU:\Console' -Name 'MultiLineEdit' -Type DWord -Value 1
该设置会让控制台允许直接粘贴多行内容而不弹出警告,且不会将换行识别为回车提交。
- 替换原有
Read-Input函数:
function Read-Input { Write-Host "`n请粘贴日报表中的[redacted]列内容,完成后按两次回车提交`n" $inputLines = @() while ($true) { $line = Read-Host if ([string]::IsNullOrEmpty($line)) { break } $inputLines += $line } return $inputLines }
用户粘贴多行内容后,按一次回车完成粘贴,再按一次空行结束输入,函数会直接返回完整的用户数组,无需额外处理换行符。
方法二:直接从剪贴板读取内容
无需用户手动粘贴,直接读取剪贴板中的Excel列内容,完全规避交互问题:
function Read-InputFromClipboard { $clipboardContent = Get-Clipboard -Raw # 按换行分割内容并过滤空行 $userArray = $clipboardContent -split "`r?`n" | Where-Object { -not [string]::IsNullOrEmpty($_) } return $userArray }
使用时只需让用户复制Excel列内容,调用该函数即可直接获取处理好的用户数组。
方法三:临时绕过警告并读取全部内容
如果不想修改注册表,可使用以下方式临时处理:
function Read-Input { Write-Host "`n请粘贴日报表中的[redacted]列内容,粘贴时按Y确认警告,完成后按回车`n" # 读取所有输入直到结束 $column = [Console]::In.ReadToEnd() # 分割换行符并过滤空行 $array = $column -split "`r?`n" | Where-Object { -not [string]::IsNullOrEmpty($_) } return $array }
用户粘贴时弹出警告后按Y确认,所有粘贴内容会被完整读取,再通过换行分割成数组。
内容的提问来源于stack exchange,提问作者CStanl
相关产品推荐
相关产品推荐

