Я попытался включить протокол TCP и установить порт как 1433 после установки MS SQL, но сценарий PowerShell всегда завершался неудачей, пока я не запустил новую консоль.
Моя проблема очень похожа с этим ( Невозможнополучить объект Smo для ManagedComputer ), но Import-Module sqlps -DisableNamechecking
не решил проблему, если я использовал то же самое окно консоли.
Вот мой командный файл:
SETUP.exe /qs /iacceptsqlserverlicenseterms /action=install /features=SQL,Tools /instancename=SQLEXPRESS /SAPWD=xxx /SECURITYMODE=SQL
xcopy sql-enable-tcp.ps1 c:\ /c /y
powershell -Command "Start-Process -Wait -Verb runas powershell -ArgumentList ""-NoExit -File c:\sql-enable-tcp.ps1"""
издесь sql-enable-tcp.ps1
:
Set-ExecutionPolicy RemoteSigned -Force
Import-Module "sqlps" -DisableNamechecking
$MachineObject = New-Object ('Microsoft.SqlServer.Management.Smo.WMI.ManagedComputer')
$ProtocolUri = "ManagedComputer[@Name='" + (Get-Item env:computername).Value + "']/ServerInstance[@Name='SQLEXPRESS']/ServerProtocol"
$tcp = $MachineObject.GetSmoObject($ProtocolUri + "[@Name='Tcp']")
$tcp.IsEnabled = $true
$MachineObject.GetSmoObject($tcp.urn.Value + "/IPAddress[@Name='IPAll']").IPAddressProperties[1].Value = "1433"
$tcp.Alter()
Restart-Service -Force 'MSSQL$SQLEXPRESS'
Поскольку каждый раз, когда $tcp = $MachineObject.GetSmoObject
выдает исключение, я добавляю исключение, поэтому я добавляю -NoExit
в список аргументов powershell.Затем я обнаружил, что $MachineObject
не существует ни в каком экземпляре ServerInstance:
ConnectionSettings : Microsoft.SqlServer.Management.Smo.Wmi.WmiConnectionInfo
Services : {MSSQL$SQLEXPRESS, MSSQLFDLauncher$SQLEXPRESS, SQLAgent$SQLEXPRESS, SQLBrowser}
ClientProtocols : {np, sm, tcp}
ServerInstances : {}
ServerAliases : {}
Urn : ManagedComputer[@Name='COMPUTER']
Name : COMPUTER
Properties : {}
UserData :
State : Existing
, но если я запустил новое командное окно PowerShell и повторно запустил тот же сценарий, появился экземпляр ServerInstance:
ConnectionSettings : Microsoft.SqlServer.Management.Smo.Wmi.WmiConnectionInfo
Services : {MSSQL$SQLEXPRESS, MSSQLFDLauncher$SQLEXPRESS, SQLAgent$SQLEXPRESS, SQLBrowser}
ClientProtocols : {np, sm, tcp}
ServerInstances : {SQLEXPRESS}
ServerAliases : {}
Urn : ManagedComputer[@Name='COMPUTER']
Name : COMPUTER
Properties : {}
UserData :
State : Existing
Мне интересно знать, что вызывает это различие во время этих двух консолей?
Можно ли делать то, что я хочу, в том же сценарии?