Не удалось получить ServerInstance, но успех в другой новой консоли - PullRequest
0 голосов
/ 23 сентября 2019

Я попытался включить протокол 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

Мне интересно знать, что вызывает это различие во время этих двух консолей?

Можно ли делать то, что я хочу, в том же сценарии?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...