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

SQL Server PowerShell执行Get-ChildItem登录失败致数据库备份失败

SQL Server PowerShell备份脚本登录失败问题解决

先明确核心问题:你的PowerShell会话使用的work\sql账户无法登录目标SQL Server实例computer\instance,导致SQL Server PowerShell Provider无法读取数据库列表,最终触发备份失败。下面是具体的排查和解决步骤:

问题回顾

你使用的备份脚本在虚拟服务器上运行正常,但在公司另一台服务器执行时触发登录失败错误:

Set-Location "SQLSERVER:\SQL\computer\distance\Databases"
foreach ($database in (Get-ChildItem)) {
    $dbName = $database.Name
    Backup-SqlDatabase -Database $dbName -BackupFile "E:\bu\$dbName"
}

错误提示:

Get-ChildItem : SQL Server PowerShell provider error: Failed to read child items. [Failed to connect to server computer\instance. --> Login failed for user 'work\sql'.]
At line:1 char:23

  • ForEach($database in (Get-ChildItem))
  • ~~~~~~~~~~~~~
    
  • CategoryInfo : ReadError: (SQLSERVER:\SQL...\instance\Databases:SqlPath) [Get-ChildItem], GenericProviderException
  • FullyQualifiedErrorId : CannotReadChildItems,Microsoft.PowerShell.Commands.GetChildItemCommand

进入目标路径执行ls时也会触发相同错误。

排查与解决步骤

1. 验证work\sql账户的SQL登录权限

登录目标SQL Server实例(推荐用SQL Server Management Studio):

  • 展开安全性 > 登录名,确认work\sql账户是否存在。如果不存在,右键新建登录名,选择Windows身份验证,输入work\sql,并至少赋予它VIEW ANY DATABASE服务器权限(用于查看数据库列表)和目标数据库的BACKUP DATABASE权限(用于执行备份)。
  • 如果账户已存在,检查它的状态是否为启用,且登录类型为Windows身份验证(work\sql看起来是域账户,需匹配对应登录类型)。

2. 确认PowerShell的运行身份

当前运行PowerShell的账户是否为work\sql?如果不是,可通过以下命令以该账户身份启动新的PowerShell会话,再执行备份脚本:

Start-Process powershell.exe -Credential work\sql

这样会话会以work\sql的身份运行,避免身份不匹配导致的登录问题。

3. 绕过SQLSERVER:\路径,显式指定连接参数

SQLSERVER:\ Provider的自动连接偶尔会出现身份验证异常,你可以直接通过Get-SqlDatabase和Backup-SqlDatabase的参数指定实例与凭据,更可靠:

$instanceName = "computer\instance"
$backupRootPath = "E:\bu\"
# 如需手动输入凭据,启用下面这行
$sqlCredential = Get-Credential -Message "输入SQL登录凭据"

# 获取目标实例下的所有数据库
$databases = Get-SqlDatabase -ServerInstance $instanceName -Credential $sqlCredential

foreach ($db in $databases) {
    $backupFilePath = Join-Path -Path $backupRootPath -ChildPath "$($db.Name).bak" # 建议添加.bak后缀,方便识别备份文件
    Backup-SqlDatabase -ServerInstance $instanceName -Database $db.Name -BackupFile $backupFilePath -Credential $sqlCredential
}

这种方式无需依赖SQLSERVER:\路径,直接建立连接,减少环境依赖问题。

4. 检查SQL Server的远程连接与防火墙设置

  • 在SSMS中右键目标实例 > 属性 > 连接,勾选“允许远程连接到此服务器”。
  • 确认SQL Server Browser服务处于运行状态(如果是命名实例,需要该服务解析实例名称)。
  • 检查目标服务器的防火墙规则,允许PowerShell所在服务器访问SQL Server的端口(默认1433,命名实例可能使用动态端口,可在SQL Server配置管理器中查看)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:14:04