【问题标题】:Change LogOn properties of a SQL server instance更改 SQL Server 实例的 LogOn 属性
【发布时间】:2013-08-26 13:44:33
【问题描述】:

我想使用代码更改 sql server 2008 r2 实例的登录属性。 手动我可以通过右键单击实例名称->登录在 SQL 服务器配置管理器中执行此操作。在内置帐户下,将网络服务更改为本地服务。然后点击应用。 SQL 实例将重新启动以使更改生效。

现在锄头我可以使用代码做同样的事情(网络服务到本地服务)。我认为可以使用 WMI 来完成。所以请帮我解决这个问题。

【问题讨论】:

    标签: sql-server wmi


    【解决方案1】:

    一种可能性是使用 PowerShell。 This 帖子中有过去对我有用的代码。如文章中所述,您必须以管理员身份运行 PowerShell,否则会出现错误。如果链接在某个时候脱机,将复制相关部分...

    #Load the assembly containing the objects used in this example
    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")
    
    #Declare Variables
    $SQLServiceAccount = 'DOMAIN\username'
    $SQLServiceAccountPassword = 'XXXXXXX'
    
    #Get a managed computer instance
    $mc = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer
    
    #List out all sql server instnces running on this mc
    foreach ($Item in $mc.Services){$Item.Name}
    
    #Get the default sql server datbase engine service
    $svc = $mc.Services["MSSQLSERVER"]
    
    # for stopping and starting services PowerShell must run as administrator
    
    #Stop this service
    $svc.Stop()
    $svc.Refresh()
    while ($svc.ServiceState -ne "Stopped")
    {
    $svc.Refresh()
    $svc.ServiceState
    }
    "Service" + $svc.Name + " is now stopped"
    
    #change service account credentials
    $svc.SetServiceAccount($SQLServiceAccount,$SQLServiceAccountPassword)
    
    "Starting " + $svc.Name
    $svc.Start()
    $svc.Refresh()
    while ($svc.ServiceState -ne "Running")
    {
    $svc.Refresh()
    $svc.ServiceState
    }
    $svc.ServiceState
    "Service" + $svc.Name + "is now started"
    

    【讨论】:

    • 我发现使用 vbscript 的 WMI 解决方案比 powershell 容易。因为它很容易实现。请看我对我自己问题的回答。
    • SQLWMI 应该用于管理 SQL Server 服务帐户。使用 WMI 或服务控制台不会传播 SQL Server 运行服务所需的服务帐户权限的必要更改(例如,访问数据库文件目录等)
    【解决方案2】:

    可以使用 WMI 将登录属性从网络服务更改为 localSystem。

    使用Change method of the Win32_Service class

    在change方法中,前6个参数指定为空白,然后将StartName指定为LocalSystem(如果需要,您还可以指定其他参数,例如登录名)和StartPassword为空密码(本地系统为空白密码)。

    下面是一个 vbscript 来做。

    strComputer = "."
    Set objWMIService = GetObject _
        ("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colServices = objWMIService.ExecQuery _
        ("Select * From Win32_Service where Name = 'MSSQL$Instancename'")
    For Each objService in colServices
        errReturn = objService.Change( , , , , , , "LocalSystem","")     
    Next
    

    另请参阅this link 了解更多信息

    【讨论】:

      猜你喜欢
      • 2011-12-11
      • 2013-11-08
      • 1970-01-01
      • 2017-04-24
      • 2014-03-23
      • 2021-09-05
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多