powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выполнение скрипта
19 сообщений из 19, страница 1 из 1
Выполнение скрипта
    #39634802
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу немного автоматизировать настройку конфигураций SQL-сервера.

На одном из этапов из моей программы на VB6 нужно поменять всего лишь два параметра. В принципе, это успешно делает приведенный ниже скрипт VBS. Но проблема в том что перетащить данный код в VB6 я не могу - он повалится по ошибке.

Попытка же выполнить данный скрипт из VB6 "cscript C:\MyPath\chPort.vbs" (или "cmd /k cscript C:\MyPath\chPort.vbs" чтобы увидеть строку с ошибкой) приводит к ошибке. Любыми методами - Shell, CreateProcess...

Понятно что тут проблема возникает из-за прав. Тот же Far (запущенный от имени Администратора) его прекрасно выполняет...

В общем, кто сталкивался с подобным - подскажите решение...

Собственно скрипт ( взятый отсюда ):

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
'This script can be used to change the TCP Port of the a SQL Server instance using SQL Server WMI Namespace

'Specify the computer name in the parameter below. Default is local server.

strComputer = "." 

'Specify the instance name if any. Default is MSSQLSERVER.
'Assumption is that we are running this for the default instance. 
'For a named instance, only provide the instance name. Eg: For a named instance LABDC\INST1, the parameter below would be strInstance = "INST1"
'For a cluster, we need to run this script on the active node.

strInstance = "KATMAI"

'Specify the new PORT 

strPort = "1434"

'Parameter to store the current Port Value
Dim strCurrPort

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\Microsoft\SqlServer\ComputerManagement10") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM ServerNetworkProtocolProperty WHERE ProtocolName = 'Tcp' AND InstanceName = '"&strInstance&"' AND PropertyName = 'TcpPort' AND IPAddressName = 'IPAll'",,48) 
For Each objItem in colItems 
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "    TCP Port Setting for IP ALL    "
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "TCP Port Value: " & objItem.PropertyStrVal
    Wscript.Echo "ProtocolName: " & objItem.ProtocolName
Next

' Obtain an instance of the the class 
' using a key property value.
Set objShare = objWMIService.Get("ServerNetworkProtocolProperty.InstanceName='"&strInstance&"',IPAddressName='IP1',PropertyName='TcpPort',PropertyType='1',ProtocolName='Tcp'")

' Obtain an InParameters object specific
' to the method.
Set objInParam = objShare.Methods_("SetStringValue"). _
    inParameters.SpawnInstance_()

' Add the new TCP Port here.
objInParam.Properties_.Item("StrValue") =  strPort

' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("ServerNetworkProtocolProperty.InstanceName='"&strInstance&"',IPAddressName='IPAll',PropertyName='TcpPort',PropertyType='1',ProtocolName='Tcp'", "SetStringValue", objInParam)

Wscript.Echo ""

'List success/failure
If (objOutParams.ReturnValue = 0) Then 

Wscript.Echo "TCP Port changed SUCCESSFULLY changed for instance : " & strInstance 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM ServerNetworkProtocolProperty WHERE ProtocolName = 'Tcp' AND InstanceName = '"&strInstance&"' AND PropertyName = 'TcpPort' AND IPAddressName = 'IPAll'",,48) 
For Each objItem in colItems 
    Wscript.Echo ""
    Wscript.Echo "------------------------------------------------------------"
    Wscript.Echo "  NEW TCP Port Setting for IP ALL         :"& objItem.PropertyStrVal
    Wscript.Echo "------------------------------------------------------------"
Next

' Execute the method and obtain the return status.
' Change the TCP Dynamic Ports to blank to avoid startup issues

' Change the input paramter to blank
objInParam.Properties_.Item("StrValue") =  ""

Set objOutParams = objWMIService.ExecMethod("ServerNetworkProtocolProperty.InstanceName='"&strInstance&"',IPAddressName='IPAll',PropertyName='TcpDynamicPorts',PropertyType='1',ProtocolName='Tcp'", "SetStringValue", objInParam)

Wscript.Echo ""
If (objOutParams.ReturnValue = 0) Then 
Wscript.Echo "TCP Dynamic Port changed SUCCESSFULLY changed for instance : " & strInstance 
Wscript.Echo "SQL Services need to be restarted for the changes to take effect." 
End If

If (objOutParams.ReturnValue > 0 OR objOutParams.ReturnValue < 0) Then Wscript.Echo "TCP Dynamic Port change UNSUCCESSFUL for instance : " & strInstance End If      

End If

If (objOutParams.ReturnValue > 0 OR objOutParams.ReturnValue < 0) Then Wscript.Echo "TCP Port change UNSUCCESSFUL for instance : " & strInstance End If   
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39634805
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S
Само-собой, что все нужные мне значения я в скрипт подставляю...
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39634807
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFон повалится по ошибке.AndrFприводит к ошибке
ошибки нам нужно угадать?
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39634808
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
ShellExecute 0, "runas", App.Path & "\my.exe", Command, vbNullString, 3



manifest file:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
     <assemblyIdentity version="1.0.0.0"
	processorArchitecture="X86"
	name="ExeName"
	type="win32"/>
 <description>elevate execution level</description>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
     <security>
         <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
         </requestedPrivileges>
      </security>
   </trustInfo>
</assembly>
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39634815
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант с диалогом

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Set objShell = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
strPath = FSO.GetParentFolderName (WScript.ScriptFullName)
If FSO.FileExists(strPath & "\MAIN.VBS") Then
     objShell.ShellExecute "wscript.exe", _
        Chr(34) & strPath & "\MAIN.VBS" & Chr(34), "", "runas", 1
Else
     MsgBox "Script file MAIN.VBS not found"
End If
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39634820
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One[src vba]
manifest file

Спасибо. Возможно оно. Попробую.
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39635279
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению, ни один из вариантов не сработал.

Собственно, сам VB я до этого запускал с правами админа, но в варианте запуска скрипта из программы оно не помогает. Можно было бы попробовать работу со скрипт-контролом, но мне этот вариант не подходит - нужно чтобы программа выполнялась на компе без установленных компонентов.

В принципе, нужного можно было бы достичь и записью в реестр вот этой информации (номера портов - чисто отладочные):

Код: sql
1.
2.
3.
4.
5.
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.INST1\MSSQLServer\SuperSocketNetLib\Tcp\IPAll]
"TcpPort" = "20"
"TcpDynamicPorts"="50220"



Но опять-же при попытке писать в эту ветку - облом. Как и при попытке запуска из программы reg-файла - все так же срабатывает UAC... Хотя с Far-ом все прекрасно выполняется...
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39635283
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
система x64?
тогда руками запускайте от имени админа cmd.exe из папки c:\windows\system32 и выполняйте reg-файл
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39635286
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и пишите инструкцию для запуска
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39635362
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, 64x. Пока, видимо, так и придется - по окончании работы утилиты вручную запускать сформированный ею файл, чтобы доделать остатки... Криво, конечно, но иначе пока не удается.
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39636254
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Путем перебора вариантов нашел таки решение - нужно подключившись к нужному инстансу SQL-сервера выполнить на нем:

Код: sql
1.
2.
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib\Tcp\IPAll', N'TcpPort', REG_SZ, '1433'
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib\Tcp\IPAll', N'TcpDynamicPorts', REG_SZ, ''



Вот так все проходит - настройки портов SQL сервера изменяются на нужные!
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39640107
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все же не до конца протестировал в прошлый раз.

Да, настройки в реестре меняются на нужные. Однако сервис SQL-сервера потом не может рестартовать!

Вручную лечится элементарно - надо в редакторе реестра ручками найти нужную ветку, например:

Код: sql
1.
2.
3.
4.
5.
6.
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.INST1\MSSQLServer\SuperSocketNetLib\Tcp\IPAll]
"TcpPort"="1433"
"TcpDynamicPorts"=""
"DisplayName"="Any IP Address"



И в ней просто перезаписать значение TcpDynamicPorts - можно просто открыть его и, ничего не меняя, закрыть нажав на ОК. Само по себе значение TcpDynamicPorts не меняется, но после этого сервис начинает стартовать...

В общем, нет в жизни счастья - проблема остается нерешенной - я никак не могу корректно задать из своей программы значения портов SQL сервера, так чтобы потом все работало.

Ну неужто никто не делал подобного?
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39640129
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обычно просто делают текстовую инструкцию по настройке программы
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39640157
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneобычно просто делают текстовую инструкцию по настройке программы

Инструкция-то есть - из 20-и пунктов, которые нужно выполнить после установки SQL-сервера.

Но я хочу облегчить жизнь себе любимому - серверов по работе приходится ставить много. Ну дюже муторно проходить все пункты инструкции, при этом ничего не пропустив. На данный момент пока не удается победить два пункта инструкции - один из них в данном вопросе, а второй - создание и настройка Maintenance Plans.
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39640165
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ищите powershell скрипты
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39640238
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneищите powershell скрипты

Боюсь будет та же проблема что и VBS - при запуске из программы не хватит прав.
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39640239
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneищите powershell скрипты

Боюсь будет та же проблема что и VBS - при запуске из программы не хватит прав.
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39640268
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не надо из программы вызывать, надо из инсталлятора под админскими правами или ручками так же
...
Рейтинг: 0 / 0
Выполнение скрипта
    #39640471
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneне надо из программы вызывать, надо из инсталлятора под админскими правами или ручками так же

Люди, ну сколько можно!

Ну не прикладная эта программа, а чисто моя, с помощью которой я хочу автоматизировать одну из рутинных частей своей работы (которую вы предлагаете делать ручками!). Запускаю я ее с админскими правами, работать с реестром умею.

Но именно данная ветка реестра - дюже интересная. Я об нее уже все оставшиеся зубы обломал...
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выполнение скрипта
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]