2013-10-04 67 views
4

我已經編寫了一個PowerShell腳本,用於創建新的SQL Server數據庫和登錄名,然後將數據庫所有者設置爲新創建的用戶。這是成功的。但是,當嘗試在同一個腳本中登錄時,我會遇到登錄失敗的異常。如果我使用SQL Server Management Studio,則登錄工作。使用Powershell創建SQL Server用戶

這裏的腳本:

$server = new-Object Microsoft.SqlServer.Management.Smo.Server("(local)") 
$db = New-Object Microsoft.SqlServer.Management.Smo.Database($server, 'TestDB') 
$db.Create() 

$login = new-object Microsoft.SqlServer.Management.Smo.Login("(local)", 'TestUser') 
$login.LoginType = 'SqlLogin' 
$login.PasswordPolicyEnforced = $false 
$login.PasswordExpirationEnabled = $false 
$login.Create('Password1') 

$server = new-Object Microsoft.SqlServer.Management.Smo.Server("(local)") 
$db = New-Object Microsoft.SqlServer.Management.Smo.Database 
$db = $server.Databases.Item('TestDB') 
$db.SetOwner('TestUser', $TRUE) 
$db.Alter() 
Invoke-Sqlcmd -ServerInstance localhost -Database 'TestDB' -Username 'TestUser' -Password 'Password1' -Query "SELECT * FROM sysusers" 

我試着加入Start-Sleep(最多5分鐘)無濟於事,我已經試過Restart-Service mssqlserver -Force,也無濟於事。

任何想法?

+0

在異常中應該有更多的信息,而不僅僅是「登錄失敗」 - 你能添加異常的更多文本嗎? –

+0

錯誤:Invoke-Sqlcmd:用戶'TestUser'的登錄失敗。 –

+0

該腳本在我的本地開發實例上工作(對已命名的實例進行小調整)。你有權訪問SQL Server日誌嗎?如果您的服務器設置爲審覈失敗的登錄,則日誌將包含比返回給客戶端更詳細的信息。尋找錯誤18456等等。聽起來就像你有一個解決方法,但如果你仍然好奇,日誌可能會有所幫助。 – Matt

回答

0

我覺得你的最後一行應爲:

Invoke-Sqlcmd -ServerInstance '(local)' -Database 'TestDB' -Username 'TestUser' -Password 'Password1' -Query "SELECT * FROM sysusers" 

注意使用'(本地)'而不是'本地主機'

+0

試過,無濟於事。 –

1

這不是我遇到的問題的答案,只是解決方法。該腳本作爲自動化部署的一部分運行,整個腳本在「NT AUTHORITY \ SYSTEM」用戶名下運行,因此爲了解決日誌問題,我只是簡單地使用了Integrated Security=true