如何在PowerShell中复制.ps1脚本到远端时不丢失原有格式?
本地原始代码片段:
{..some code here..([scriptblock]::Create(”. {$script} $(&{$args} @params)”))}
复制到远端后乱码片段:{..some code here..([scriptblock]::Create(â€. {$script} $(&{$args} @params)â€))}
上述乱码为UTF-8特殊字符被非UTF-8编码解析导致的问题,你可以按以下步骤处理彻底避免这类损坏:
优先使用二进制模式传输文件
不要用文本模式的传输工具,也不要手动复制粘贴富文本内容。如果通过PowerShell远程操作,直接使用Copy-Item的-ToSession参数完成二进制传输,示例命令:# 建立远程会话 $remoteSession = New-PSSession -ComputerName 远端主机地址 -Credential 登录凭据 # 直接传输文件,不会修改文件编码和内容 Copy-Item -Path 本地存储路径\my.ps1 -Destination 远端目标存储路径\ -ToSession $remoteSession如果使用scp、sftp类工具,手动开启二进制传输模式即可。
统一脚本文件编码
Windows平台原生PowerShell默认优先读取带BOM的UTF-8编码文件,你可以在本地重新保存脚本统一编码:# 本地重新保存为带BOM的UTF-8编码 Get-Content .\my.ps1 -Encoding UTF8 | Set-Content .\my.ps1 -Encoding UTF8BOM如果需要跨Linux/Windows传输,也可以统一使用无BOM的UTF-8编码,同时在远端PowerShell配置文件(
$PROFILE)中添加全局编码配置:$PSDefaultParameterValues['*:Encoding'] = 'utf8' [Console]::OutputEncoding = [System.Text.Encoding]::UTF8脚本编写时规避特殊字符
你原始代码中使用的弯引号(“”)属于排版类特殊字符,是本次乱码的直接诱因。编写PowerShell脚本时统一使用半角直引号(""),可以从根源避免这类转码错误。手动复制时使用纯文本编辑器中转
若必须手动复制代码,不要用Word、网页富文本框等工具中转,全程使用VS Code、Notepad++等纯文本编辑器打开脚本后再复制,同时确保两端编辑器的默认编码为UTF-8。
内容的提问来源于stack exchange,提问作者Money Times

