sql-server - 无法让 powershell 处理 SQL Server 连接失败

标签 sql-server sql-server-2008 powershell smo

我故意尝试登录到没有登录名的 SQL Server,以使用 SQL Server 2008 R2 测试 PowerShell 2.0 和 SMO 的一些错误处理。

这是我的脚本:

param ([String]$instanceName);
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null;

$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection ; 
$conn.LoginSecure = $true; 
$conn.ServerInstance = $instanceName ; 
$conn.NonPooledConnection = $true ;  

try {
    $serverInstance = New-Object Microsoft.SqlServer.Management.Smo.Server ($conn) ; 
}

catch { 
    $err = $Error[0].Exception ; 
    write-host "Error caught: "  $err.Message ; 
    continue ; 
} ; 

Write-Output $serverInstance.Version;

catch block 没有被执行。有任何想法吗?我也尝试使用 trap 函数来捕获它,但得到了相同的结果。

更新 1

我已将我的脚本更改为以下内容并让它在线捕获异常

foreach($j in $serverInstance.Databases) {

如果我注释掉 foreach 循环,foreach 循环下面的行不会引发异常,尽管它应该(IMO)。

param ([String]$instanceName);

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null; # load the SMO assembly
clear

 $ErrorActionPreference = "Stop";
    $conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection ; 
    $conn.LoginSecure = $false; 
    $conn.Login = "sa" ; 
    $conn.Password = "password" ; 
    $conn.ServerInstance = $instanceName ; 
    $conn.NonPooledConnection = $true ;  

try {
    $serverInstance = New-Object Microsoft.SqlServer.Management.Smo.Server ($conn) ; 
    foreach($j in $serverInstance.Databases) { 
        write-host $j.name ; 
    } ; 
    Write-Output $serverInstance.Databases.Count;
}

catch [Microsoft.SqlServer.Management.Common.ConnectionFailureException] {
    $err = $Error[0].Exception ; 
    write-host "Error caught: "  $err.Message ; 
    while ( $err.InnerException )    {
        $err = $err.InnerException;
        Write-Host "Inner exception:" $err.InnerException.Message;
        };      
    return;
} ; 

最佳答案

我找到了解决方法。 Microsoft 已确认这是 SMO 中的一个错误,他们认为目前还不足以修复它。此处详细介绍了解决方法:

https://connect.microsoft.com/SQLServer/feedback/details/636401/smo-is-inconsistent-when-raising-errors-for-login-faliures#

关于sql-server - 无法让 powershell 处理 SQL Server 连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13072207/

相关文章:

sql - 如何从 biztalk 编排中读取一行 sql server db 数据?

sql - .openrecordsource "run-time error ' 9 1'"

powershell - New-AzureDeployment 包上传超时

powershell - 如何在团队中使用通用的 powershell 配置文件

sql-server - 如何在一个查询中使用 EXISTS 和 NOT EXISTS?

C#控制台应用程序无效操作异常

SQL Server Profiler - 查看动态 Sql

powershell - 将 awk 过滤转换为等效的 Windows 命令行

sql-server - 使用 powershell 执行 .sql 脚本并将输出存储在 .sql 文件中

sql - TSQL : OR Status of Previous month