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

使用Posh-SSH通过SFTP上传至Azure Blob容器时Cmdlets未识别问题

解决PowerShell中Posh-SSH Cmdlet无法识别及Azure Blob SFTP上传问题

问题背景

在Windows 11系统上使用PowerShell 5.1/7版本,尝试通过Posh-SSH 3.1.3模块以SFTP方式上传本地文件至Azure Blob容器时,出现Set-SFTPFile、Get-SFTPFile等Cmdlet无法被识别的错误。已完成以下操作但问题未解决:

  • 执行Install-Module -Name Posh-SSH -Scope CurrentUser -Force安装模块
  • 执行Import-Module Posh-SSH导入模块
  • 运行上传代码时收到错误提示:‘Set-SFTPFile’未被识别为 cmdlet、函数、脚本文件或可运行程序的名称
  • 通过Get-Module -ListAvailable Posh-SSH确认模块已成功安装

一、Cmdlet无法识别的原因及解决方法

  1. 模块导入不完整或版本兼容问题

    • 检查PowerShell执行策略:执行Get-ExecutionPolicy,若结果为Restricted,需修改为RemoteSigned以允许模块正常导入:
      Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
      
    • 强制重新导入模块并验证Cmdlet:执行以下命令,若输出中没有Set-SFTPFile,说明模块可能损坏,需卸载重装:
      Import-Module Posh-SSH -Force; Get-Command -Module Posh-SSH
      # 卸载重装命令
      Uninstall-Module -Name Posh-SSH -Force
      Install-Module -Name Posh-SSH -Scope CurrentUser -Force -AllowClobber
      
    • 确认PowerShell环境兼容性:PowerShell 5.1需确保.NET Framework版本在4.7.2以上,PowerShell 7则需确认模块安装路径对应正确的PowerShell版本目录。
  2. 模块路径配置问题

    • 执行$env:PSModulePath查看模块路径列表,确认Posh-SSH的安装目录(通常为$HOME\Documents\WindowsPowerShell\Modules或$HOME\Documents\PowerShell\Modules)在列表中。若不在,手动添加对应路径:
      # PowerShell 5.1
      $env:PSModulePath += ";$HOME\Documents\WindowsPowerShell\Modules"
      # PowerShell 7
      $env:PSModulePath += ";$HOME\Documents\PowerShell\Modules"
      

二、正确导入与使用Posh-SSH的方法

  1. 规范模块导入流程
    每次会话启动时,执行以下命令确保模块完整导入:

    # 清理残留模块实例
    Remove-Module Posh-SSH -ErrorAction SilentlyContinue
    # 强制重新导入
    Import-Module Posh-SSH -Force
    # 验证目标Cmdlet是否存在
    Get-Command Set-SFTPFile
    
  2. Azure Blob SFTP上传的正确代码示例
    注意Azure Blob SFTP端点的格式、凭据规则及路径要求:

    # 凭据说明:用户名为存储账户名,密码为存储账户密钥或SAS令牌
    $credential = Get-Credential
    # 建立SFTP会话(端口固定为22)
    $sftpSession = New-SFTPSession -ComputerName "your-storage-account.blob.core.windows.net" -Credential $credential -AcceptKey -Port 22
    # 上传文件(远程路径格式为 /<容器名>,如需子目录则为 /<容器名>/子目录)
    Set-SFTPFile -SessionId $sftpSession.SessionId -LocalFile "C:\local\example.txt" -RemotePath "/your-container" -Overwrite
    # 关闭SFTP会话
    Remove-SFTPSession -SessionId $sftpSession.SessionId
    

三、Azure Blob SFTP上传的额外配置要求

  • 存储账户类型:必须使用通用v2存储账户或Blob存储账户,不支持经典存储账户
  • SFTP服务启用:在存储账户的「SFTP」设置中开启服务,并创建具有Blob读写权限的本地用户(关联存储账户密钥或SAS令牌作为密码)
  • 网络权限:确保存储账户的防火墙/虚拟网络规则允许本地PowerShell所在IP地址访问

替代方案:使用官方Azure PowerShell模块直接上传

若Posh-SSH问题无法快速解决,推荐使用官方Az.Storage模块完成上传,操作步骤如下:

  1. 安装模块:
    Install-Module -Name Az.Storage -Scope CurrentUser -Force
    
  2. 登录Azure账户:
    Connect-AzAccount
    
  3. 上传单个文件:
    $storageContext = (Get-AzStorageAccount -ResourceGroupName "your-resource-group" -Name "your-storage-account").Context
    Set-AzStorageBlobContent -ContainerName "your-container" -File "C:\local\example.txt" -Blob "example.txt" -Context $storageContext
    
  4. 批量上传文件:
    Get-ChildItem "C:\local\files\*" | Set-AzStorageBlobContent -ContainerName "your-container" -Context $storageContext
    

内容的提问来源于stack exchange,提问作者Rohitsuryaa S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:43:44