2014-06-17 1 views
0

나는 시도하고 다음과 같은 파워 쉘 스크립트를 실행해야합니다 :마이크로 소프트 DacServices 파워 쉘 오류 호출하는 새로운 객체

New-Object : Exception calling ".ctor" with "1" argument(s): "The type initializer for 'Microsoft.SqlServer.Dac.DacServices' threw an exception." 
At C:\Scripts\DeployDacPac.ps1:3 char:16 
+ $d = new-object <<<< Microsoft.SqlServer.Dac.DacServices "server=localhost" 
+ CategoryInfo   : InvalidOperation: (:) [New-Object],      MethodInvocationException 
+ FullyQualifiedErrorId : Cons tructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand 
: 실행시

add-type -path "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\Microsoft.SqlServer.Dac.dll"; 
$d = new-object Microsoft.SqlServer.Dac.DacServices "server=localhost" 

# Load dacpac from file & deploy to database named pubsnew 
$dp = [microsoft.sqlserver.dac.dacpackage]::load("c:\deploy\MyDbDacPac.dacpac") 
$d.deploy($dp, "MyDb", $true) 

그러나, 나는 다음과 같은 오류를 얻고있다

자동 데이터베이스 배포를 위해이 스크립트를 실행하려고하는데이 이상한 오류가 발생하지 않습니다. Powershell for .NET 4.0의 런타임 버전을 원격으로 다시 업데이트하도록 실행 정책을 이미 설정했습니다. 그 밖의 무엇이 잘못 될 수 있는지 알 수 없습니다.

도움이 될 것입니다.

+0

다음 링크를 사용하여 설정하고 있습니다. 예를 들어 적절한 구문을 사용하고 있습니다. http://msmvps.com/blogs/deborahk/archive/2014/02/10/deploying-a-dacpac-with-powershell.aspx http://blogs.blackmarble.co.uk/blogs/rfennell /post/2013/03/14/Installing-a-DB-from-a-DACPAC-using-Powershell-as-part-of-TFS-Lab-Management-deployment.aspx http : //blog.raffaeu. com/archive/2013/10/17/deploy-database-project-using-octopus.aspx –

답변

2

기본 인증 방법은 사용자 이름과 암호를 요구하는 SQL Server 인증입니다. 이러한 매개 변수를 제공하거나 Windows 인증을 사용해야한다고 명시 적으로 지정해야합니다. 연결 문자열 인수를 다음과 같이 바꾸면됩니다.

"server=localhost;Integrated Security = True;" 

또는이 논리를 캡슐화하기 위해 다음 함수를 사용할 수 있습니다. 기본 매개 변수 집합은 UserName 또는 Password 매개 변수를 포함하지 않는 'WindowsAuthentication'입니다. 이 중 하나를 제공하면 Powershell은 'SqlServerAuthentication'매개 변수 집합을 사용하고 $ PSCmdlet.ParameterSetName 변수가 적절하게 설정됩니다.

function Get-DacServices() 
{ 
    [CmdletBinding(DefaultParameterSetName="WindowsAuthentication")] 
    Param(
     [string]$ServerName = 'localhost', 
     [Parameter(ParameterSetName='SqlServerAuthentication')] 
     [string]$UserName, 
     [Parameter(ParameterSetName='SqlServerAuthentication')] 
     [string]$Password 
    ) 

    $connectionString = "server=$serverName;"; 

    if($PSCmdlet.ParameterSetName -eq 'SqlServerAuthentication') 
    { 
     $connectionString += "User ID=$databaseUsername;Password=$databasePassword;"; 
    } 
    else 
    { 
     $connectionString += "Integrated Security = True;"; 
    } 

    $result = new-object Microsoft.SqlServer.Dac.DacServices $connectionString; 

    return $result; 
}