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

如何在PowerShell中复制.ps1脚本到远端时不丢失原有格式?

PowerShell脚本跨系统复制字符损坏解决方案

本地原始代码片段:
{..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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:18:01