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

Invoke-Command调用Get-ChildItem报错:无法找到网络共享路径

解决Invoke-Command远程执行时无法访问网络共享的问题

问题本质

这个错误是典型的Kerberos双跳权限问题:当从ServerA通过Invoke-Command远程到ServerB时,你的域账号身份只能完成从ServerA到ServerB的第一跳认证,但无法自动将身份传递到第三台共享服务器(网络共享所在机器)。此时ServerB访问共享时使用的是本地系统账号,自然没有权限访问域内共享资源。

可行解决方案

1. 启用Kerberos约束委派(域环境推荐方案)

这是域环境下解决双跳问题的标准安全方案,通过AD配置允许ServerB将你的域身份委派给共享服务器:

  • 登录域控制器,打开Active Directory用户和计算机
  • 找到ServerB的计算机对象,右键选择属性 → 切换到委派选项卡
  • 选择信任此计算机以委派指定的服务,点击添加
  • 在弹出窗口中点击用户或计算机,找到共享服务器名称并添加
  • 从可用服务中选择CIFS(网络共享依赖的协议),确认添加
  • 配置完成后重启ServerB生效

2. 在ServerB本地预存共享凭据

通过在ServerB上预先保存域账号的共享访问凭据,让远程执行时可以直接使用:

  • 在ServerB本地执行以下命令(替换为你的域账号和密码):
    cmdkey /add:share-ip-address /user:DOMAIN\your-domain-account /pass:your-password
    
  • 之后远程脚本无需修改即可正常执行,因为ServerB本地已经缓存了访问该共享的凭据
  • 注意:凭据会保存在ServerB本地,密码变更后需要重新执行命令更新

3. 远程脚本中显式传递凭据

在Invoke-Command时带上凭据,在远程会话中用该凭据访问共享:

  • 先在ServerA上获取域账号凭据:
    $cred = Get-Credential DOMAIN\your-domain-account
    
  • 修改远程执行脚本,通过New-PSDrive挂载共享并指定凭据:
    $CurrentPath = '\\share-ip-address\hidden_share$\sub-folder\'
    $cred = Get-Credential DOMAIN\your-domain-account
    Invoke-Command -ComputerName ServerB -Credential $cred -ScriptBlock {
        # 临时挂载共享
        New-PSDrive -Name TempShare -PSProvider FileSystem -Root $using:CurrentPath -Credential $using:cred | Out-Null
        # 执行文件查询
        Get-ChildItem -LiteralPath TempShare:\ -Filter "*string*.ext" -Recurse | Sort-Object LastWriteTime | Select-Object Name, LastWriteTime -Last 1
        # 清理临时驱动器
        Remove-PSDrive TempShare -ErrorAction SilentlyContinue
    }
    

4. 使用CredSSP认证(不推荐,安全风险高)

CredSSP允许身份跨跳传递,但会将凭据明文发送到远程服务器,仅适合完全信任的环境:

  • 在ServerA(客户端)执行:
    Enable-WSManCredSSP -Role Client -DelegateComputer ServerB
    
  • 在ServerB(服务器)执行:
    Enable-WSManCredSSP -Role Server
    
  • 执行远程命令时指定认证方式:
    $CurrentPath = '\\share-ip-address\hidden_share$\sub-folder\'
    Invoke-Command -ComputerName ServerB -Authentication Credssp -ScriptBlock {
        Get-ChildItem -LiteralPath $using:CurrentPath -Filter "*string*.ext" -Recurse | Sort-Object LastWriteTime | Select-Object Name, LastWriteTime -Last 1
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:53:21