2

リモートSQLデータベースに接続して、Powershellで「select@@servername」クエリを実行しようとしています。統合セキュリティを使用せずにこれを実行しようとしています。私は「get-credential」と「invoke-sqlcmd」に苦労してきましたが、「get-credential」から別のPowershellコマンドレットにパスワードを渡すことができないことがわかりました(私は思います)。

これが私が使用しているコードです:

add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100

# load assemblies
[Reflection.Assembly]::Load("Microsoft.SqlServer.Smo, `
      Version=9.0.242.0, Culture=neutral, `
      PublicKeyToken=89845dcd8080cc91")
[Reflection.Assembly]::Load("Microsoft.SqlServer.SqlEnum, `
      Version=9.0.242.0, Culture=neutral, `
      PublicKeyToken=89845dcd8080cc91")
[Reflection.Assembly]::Load("Microsoft.SqlServer.SmoEnum, `
      Version=9.0.242.0, Culture=neutral, `
      PublicKeyToken=89845dcd8080cc91")
[Reflection.Assembly]::Load("Microsoft.SqlServer.ConnectionInfo, `
      Version=9.0.242.0, Culture=neutral, `PublicKeyToken=89845dcd8080cc91")

# connect to SQL Server

$serverName = "HLSQLSRV03"
$server = New-Object -typeName Microsoft.SqlServer.Management.Smo.Server -argumentList $serverName

# login using SQL authentication

$server.ConnectionContext.LoginSecure=$false;
$credential = Get-Credential
$userName = $credential.UserName -replace("\\","")
$pass = $credential.Password
$server.ConnectionContext.set_Login($userName)
$server.ConnectionContext.set_SecurePassword($credential.Password)
$DB = "Master"

invoke-sqlcmd -query "select @@Servername" -database $DB -serverinstance $servername -username $username -password $pass

「invoke-sqlcmd」行の最後にパスワードをハードコーディングするだけで、機能します。これは、「get-credential」を「invoke-sqlcmd」と一緒に使用できないためですか?

もしそうなら...私の選択肢は何ですか?

助けてくれてありがとう

エモ

4

1 に答える 1

5

-password 属性は、パスワードを渡す SecureString 値ではなく、プレーンテキスト文字列としてパスワードを想定しているため、コマンドが機能していません。

SQL を実行するために 2 つの異なる方法を使用しようとしているように見えますが、アセンブリを使用する方法と、invoke-sqlcmd を使用する方法です。

invoke-sqlcmd を使用する場合、アセンブリをロードして他のすべてのことを行う必要はありません。

invoke-sqlcmd を機能させるために必要なことは、パスワードをプレーンテキストに変換することだけです。

$serverName = "HLSQLSRV03"
$DB = "Master" 
$credential = Get-Credential 
$userName = $credential.UserName.Replace("\","")  
$pass = $credential.GetNetworkCredential().password  

invoke-sqlcmd -query "select @@Servername" -database $DB -serverinstance $servername -username $username -password $pass
于 2010-04-26T22:35:08.390 に答える