2016-10-27 25 views
2

以下は、AWS SQL Serverデータベースに接続するためのPowerShellスクリプトです。プロンプトを表示せずにスクリプトでコード化された資格情報を設定するにはどうすればよいですか?PowerShellスクリプトでSQL Server資格情報を設定するか、資格情報で呼び出す

私はPSCredentialcredentialsGet-WmiObjectSqlConnectionを使っていくつかのオプションを試してみましたが、どれも動作していません。上記の機能を使用して

 $srv = new-object "Microsoft.SqlServer.Management.SMO.Server" "myBox"   

     #set the credentials here 
     #This sets the connection to mixed-mode authentication 
     $srv.ConnectionContext.LoginSecure=$false; 

     #Prompt for user credentials 
     $credential = Get-Credential 

     #Deal with the extra backslash character 
     $loginName = $credential.UserName -replace("\\","") 

     #This sets the login name 
     $srv.ConnectionContext.set_Login($loginName); 

     #This sets the password 
     $srv.ConnectionContext.set_SecurePassword($credential.Password) 

     #test the connection 
     $srv.Databases | Select name 
+0

から呼び出すSQLのために、プレーンテキストでユーザー名とパスワードを渡すことができますか? SQL Server側でユーザー/ログインを作成し、それを介して認証することができます。 – gofr1

答えて

2
$SQLInstance = "Instance Name" 
    $Database = "Database" 
    $ID = "User ID" 
    $Password = "Password" 

function Invoke-Sqlcommand 
{ 
    [CmdletBinding()] 
    param( 
    [Parameter(Position=0, Mandatory=$true)] [string]$ServerInstance, 
    [Parameter(Position=1, Mandatory=$false)] [string]$Database, 
    [Parameter(Position=2, Mandatory=$false)] [string]$Query, 
    [Parameter(Position=3, Mandatory=$false)] [string]$Username, 
    [Parameter(Position=4, Mandatory=$false)] [string]$Password, 
    [Parameter(Position=5, Mandatory=$false)] [Int32]$QueryTimeout=600, 
    [Parameter(Position=6, Mandatory=$false)] [Int32]$ConnectionTimeout=15, 
    [Parameter(Position=7, Mandatory=$false)] [ValidateScript({test-path $_})] [string]$InputFile, 
    [Parameter(Position=8, Mandatory=$false)] [ValidateSet("DataSet", "DataTable", "DataRow")] [string]$As="DataRow" 
    ) 

    if ($InputFile) 
    { 
     $filePath = $(resolve-path $InputFile).path 
     $Query = [System.IO.File]::ReadAllText("$filePath") 
    } 

    $conn=new-object System.Data.SqlClient.SQLConnection 

    if ($Username) 
    { $ConnectionString = "Server={0};Database={1};User ID={2};Password={3};Trusted_Connection=False;Connect Timeout={4}" -f $ServerInstance,$Database,$Username,$Password,$ConnectionTimeout } 
    else 
    { $ConnectionString = "Server={0};Database={1};Integrated Security=True;Connect Timeout={2}" -f $ServerInstance,$Database,$ConnectionTimeout } 

    $conn.ConnectionString=$ConnectionString 

    #Following EventHandler is used for PRINT and RAISERROR T-SQL statements. Executed when -Verbose parameter specified by caller 
    if ($PSBoundParameters.Verbose) 
    { 
     $conn.FireInfoMessageEventOnUserErrors=$true 
     $handler = [System.Data.SqlClient.SqlInfoMessageEventHandler] {Write-Verbose "$($_)"} 
     $conn.add_InfoMessage($handler) 
    } 

    $conn.Open() 
    $cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn) 
    $cmd.CommandTimeout=$QueryTimeout 
    $ds=New-Object system.Data.DataSet 
    $da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd) 
    [void]$da.fill($ds) 
    $conn.Close() 
    switch ($As) 
    { 
     'DataSet' { Write-Output ($ds) } 
     'DataTable' { Write-Output ($ds.Tables) } 
     'DataRow' { Write-Output ($ds.Tables[0]) } 
    } 

} 


Invoke-Sqlcommand -ServerInstance $SQLInstance -Database $Database -Query "Query Goes here" -Username $ID -Password $Password 

、あなたはあなたが合格/いくつかの永久ログイン経由でのauthする必要がPowerShellの

関連する問題