Вопрос пользователя заключается в необходимости извлечения сетевых настроек протоколов сети SQL Server с помощью языка программирования Object Pascal в среде разработки Delphi. Пользователь уже пытался найти решение, обратившись к реестру Windows или конфигурационным файлам, но единственным найденным примером было использование PowerShell и классов .NET. В связи с этим, задача состоит в том, чтобы предоставить пример кода, который позволит получить необходимую информацию без использования PowerShell и .NET.
Подтвержденный ответ
Для решения поставленной задачи можно использовать класс WMI ServerNetworkProtocol, а также подключение к соответствующему пространству имен, в зависимости от версии SQL Server:
SQL Server 2005 = ComputerManagement
SQL Server 2008 = ComputerManagement10
SQL Server 2012 = ComputerManagement11
Ниже представлен пример кода на Object Pascal, который демонстрирует, как можно извлечь информацию о сетевых протоколах SQL Server:
{$APPTYPE CONSOLE}
uses
SysUtils,
ActiveX,
ComObj,
Variants;
type
TMSSQlServerType = (MSSQL2005, MSSQL2008, MSSQL2012);
procedure GetServerNetworkProtocolInfo(SQLServerType: TMSSQlServerType; const InstanceName: string);
const
WbemUser = '';
WbemPassword = '';
WbemComputer = 'localhost';
wbemFlagForwardOnly = $00000020;
MSSQLNameSpaces: array[TMSSQlServerType] of string = ('ComputerManagement','ComputerManagement10','ComputerManagement11');
var
FSWbemLocator: OLEVariant;
FWMIService: OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject: OLEVariant;
oEnum: IEnumVariant;
iValue: LongWord;
begin
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(WbemComputer, Format('root\Microsoft\SqlServer\%s', [MSSQLNameSpaces[SQLServerType]]), WbemUser, WbemPassword);
FWbemObjectSet := FWMIService.ExecQuery(Format('SELECT * FROM ServerNetworkProtocol Where InstanceName="%s"', [InstanceName]), 'WQL', wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
while oEnum.Next(1, FWbemObject, iValue) = 0 do
begin
Writeln(Format('Enabled %s', [String(FWbemObject.Enabled)])); // Boolean
Writeln(Format('MultiIpConfigurationSupport %s', [String(FWbemObject.MultiIpConfigurationSupport)])); // Boolean
Writeln(Format('ProtocolDisplayName %s', [String(FWbemObject.ProtocolDisplayName)])); // String
Writeln(Format('ProtocolName %s', [String(FWbemObject.ProtocolName)])); // String
Writeln;
FWbemObject := Unassigned;
end;
end;
begin
try
CoInitialize(nil);
try
GetServerNetworkProtocolInfo(MSSQL2008, 'MSSQLSERVER');
finally
CoUninitialize;
end;
except
on E: EOleException do
Writeln(Format('EOleException %s %x', [E.Message, E.ErrorCode]));
on E: Exception do
Writeln(E.ClassName, ':', E.Message);
end;
Writeln('Press Enter to exit');
Readln;
end.
Этот код можно скомпилировать в консольное приложение в среде Delphi, чтобы получить информацию о сетевых протоколах SQL Server без использования PowerShell и .NET. Пример демонстрирует, как работать с WMI, подключаясь к соответствующему пространству имен, и извлекать данные о статусе протоколов, поддержке мульти-IP и других характеристиках.
Вопрос связан с извлечением сетевых настроек SQL Server с помощью языка программирования Object Pascal в Delphi, без использования PowerShell и .NET.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.