На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Windows
1. Указывайте версию Вашей ОС.
2. Запрещается размещать запросы и ссылки на кряки, серийники и т.п., а также вопросы нарушения лицензии ПО и его взлома.
3. Не разрешается давать советы из разряда "Поставь Linux".
4. Переустановка ОС - крайнее и безотказное лекарство, которое знают все. В таких советах никто не нуждается.
5. При публикации скриптов пользоваться тегами code. Тип подсветки кода выбирать строго в соответствии с языком публикуемого кода.
6. Прежде чем задать вопрос, обязательно загляните в FAQ и следуйте написанным рекомендациям для устранения проблемы. И если не помогло, а поиск по разделу не дал результатов - только тогда задавайте вопрос на форуме.
7. Вопросы, связанные с проблемами ПО, задавайте в разделе Программное обеспечение
Модераторы: Akina
Страницы: (22) « Первая ... 15 16 [17] 18 19 ...  21 22  ( Перейти к последнему сообщению )  
> Полезные скрипты , WSH (js, vbs) + WMI
    Цитата
    Akina

    Теперь ясно чего я не понимал)) Я не понимал как сделать strSubnetMask = objNetAdapter.IPSubnet! Ну и про "and DHCPEnabled=TRUE" я также недодумался!
    Akina Моск! Спасибо Вам!

    Добавлено
    Цитата
    strIPAddress = Array("192.168.0.3")

    Ув. Akina А можно сделать чтобы адрес менялся не полностью (192.168.0.3) а 192.168.xхх.211, т.е. чтобы предпоследний октет скрипт генерировал в соответствии с тем, как настроена ЛВС? <_< :blink:
    (или чтобы скрипт брал текущий ip и менял только его последний октет (т.е. менял 192.168.0.ХХХ)_)
    Сообщение отредактировано: Alexsz -
      А в чём проблема? не можете найти справку по строковым функциям в VBScript?
      http://msdn.microsoft.com/en-us/library/3ca8tfek(VS.85).aspx
        Цитата
        А в чём проблема?

        Проблема в знаниях :( Благодаря Вам нашел справку, нашел такое решение:
        ExpandedWrap disabled
          sip = getip()
          ifirstdot = instr(0,sip,".")
          iseconddot = instr(ifirstdot+1,sip,".")
          ithirddot = instr(iseconddot+1,sip,".")
          strirdoctet = mid(sip, iseconddot+1, _
           Len(sip)-ithirddot)
          Function getip()
          set myobj = getobject("winmgmts:{impersonationlevel=" & "impersonate}") "!//localhost".execquery ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
          for each ipadress in myobj
          if ipaddress.ipaddress(0) <> "0.0.0.0" then
          localip = ipaddress.ipaddress(0)
          exit for
          end if
          next
          getip = localip
          end function

        Эм, оно "нерабочее" в моменте присвоения Myobj = getobj, немогу понять что не так?
        Будте любезны, если сможете решить мою проблему, запостите код пожалуйста.. :'( :unsure:

        ( по строковым ф-циям почему например при dim a & a = array(192,168,0,191) & b = a(4) & msgbox b в ответ приходит ошибка? :(..)
        Сообщение отредактировано: Alexsz -
          Вместо использования instr посмотрите описания функций Split и Join.
          Цитата Alexsz @
          немогу понять что не так?

          Ошибка синтаксиса.
          Цитата Alexsz @
          по строковым ф-циям почему например при dim a & a = array(192,168,0,191) & b = a(4) & msgbox b в ответ приходит ошибка?

          Во-первых, тут нет строковых функций. Во-вторых, все массивы zero-based.
          Цитата Alexsz @
          Проблема в знаниях

          Ну так изучайте язык, но на более простом материале.
            To Akina
            Я пытаюсь понять, на более простом примере у меня все получается, однако именно в этом случае проблемы, благодаря Вам, Akina, я пытаюсь их решить.
            Получилось следующее:

            ExpandedWrap disabled
              strComputer = "."
              Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
              Set colNetAdapters = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE and DHCPEnabled=TRUE")
              ArrIpAddress = array("192.168.0.3")
              For Each objNetAdapter in colNetAdapters
                  for each straddress in objnetadapter.ipaddress
                      arroctet = split(straddress, ".")
                          if arroctet(0) = "10" and arroctet(1) = "10" then
                              strnewaddress = "192.168." & arroctets(2) & "." & arroctets(3)
                              arripaddress = array(strnewaddress)
                  strSubnetMask = objNetAdapter.IPSubnet
                  strGateway = objNetAdapter.DefaultIPGateway
                  strGatewayMetric = objNetAdapter.GatewayCostMetric
                  arrDNSServers = objNetAdapter.DNSServerSearchOrder
                  arrEnable = objNetAdapter.EnableStatic(arrIPAddress, strSubnetMask)
                  errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
                  objNetAdapter.SetDNSServerSearchOrder(arrDNSServers)
                End If
              Next
              next
              if err.number<>0 then
                  wscript.echo err.number, err.description
                  err.Clear
              end if


            Скрипт отрабатывает без ошибок но не меняет никаких параметров (ip,mask,gtw,dns..)
            Где я ошибся? Помогите пожалуйста Понять..
              Еще раз спасибо Akina за то что изначально направил меня в нужное русло!:)
              Итоговый рабочий самописный скрипт:

              ExpandedWrap disabled
                strComputer = "."
                Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
                Set colNetAdapters = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE and DHCPEnabled=TRUE")
                 
                For Each objNetAdapter in colNetAdapters
                  For Each strAddress in objNetAdapter.IPAddress
                        arrOctets = Split(strAddress, ".")
                        If arrOctets(0) and arrOctets(1) Then
                            strNewAddress = arroctets(0) & "." & arroctets(1) & "." & arrOctets(2) & "." & "211"            
                            arrIPAddress = Array(strNewAddress)
                    strSubnetMask = objNetAdapter.IPSubnet
                    strGateway = objNetAdapter.DefaultIPGateway
                    strGatewayMetric = objNetAdapter.GatewayCostMetric
                    arrDNSServers = objNetAdapter.DNSServerSearchOrder
                    errEnable = objNetAdapter.EnableStatic(arrIPAddress, strSubnetMask)
                    errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
                    objNetAdapter.SetDNSServerSearchOrder(arrDNSServers)
                  End If
                 Next
                Next

              В конце можно при желании прикрутить ребут машины..)
                Цитата Alexsz @
                В конце можно при желании прикрутить ребут машины..)

                А смысл? достаточно опустить и снова поднять интерфейс - а на ХР и старше так и вовсе ничего не нужно, применяется на лету.
                Единственный минус такого подхода - не сбрасывается резервирование адреса на DHCP-сервере. Плюс некоторое время висит фантом в НетБИОС-окружении.
                  Цитата Akina @
                  Единственный минус такого подхода - не сбрасывается резервирование адреса на DHCP-сервере.

                  Akina абсолютно прав, и плюс ко всему даже после перезагрузки перезагрузки ИПшник не сброситься, не видел я чтоб сброс кэша DHCP был меньше 15 минут, а обычно неделя или больше. "Сбить" DHCP сервак можно только сменив МАС адрес сетевухи или "вписаться" самому в протокол DHCP и отвергать предложения сервака получить "старый" ИП.
                    Цитата AlexJ @
                    не видел я чтоб сброс кэша DHCP был меньше 15 минут, а обычно неделя или больше

                    Вообще-то это определяется параметром Leased Time самогО DHCP-сервера.
                      Цитата Akina @
                      Вообще-то это определяется параметром Leased Time самогО DHCP-сервера.

                      Ну так о нем и говорю, редко кто ставит меньше 15 минут, а обычно все ставят неделю, после чего кэш DHCP сервака сбрасывается, если не было больше подключений с определенного МАС-адреса.
                        Цитата Akina @
                        Цитата
                        Плюс некоторое время висит фантом в НетБИОС-окружении.

                        Akina
                        А если сбросить командой netsh winsock reset? Тогда этот самый фантом исчезнет?
                        Сообщение отредактировано: Alexsz -
                          Цитата Alexsz @
                          А если сбросить командой netsh winsock reset? Тогда этот самый фантом исчезнет?)

                          Если сбросить на мастер-браузере и на рабстанции - да.

                          Сообщения были разделены в тему "Скрипт для биллинга"
                            Здравствуйте! Имеется следующий скрипт: (выводит свободное дисковое пространтсво)
                            ExpandedWrap disabled
                              on Error resume Next
                              stringx = "Локальные диски" & vbNewLine  & vbNewLine
                               
                              Set fso = WScript.CreateObject("Scripting.FileSystemObject")
                              Set WSHShell = WScript.CreateObject("WScript.Shell")
                              'Проверяем все драйвы (HDD, FDD, CDD) в системе    
                              For each i In fso.Drives
                                    If i.DriveType=1 Then
                                         If i<>"A:" Then
                                             freef = frit(i)
                                       End If
                                  End If
                                   If i.DriveType=2 Then
                                             free=frit(i)
                                                stringx= stringx & " На диске " & i & " свободно " & free & " Мб " & vbNewLine
                                   End If
                              Next
                              stringx = stringx
                              WSHShell.Popup(stringx)
                              WScript.Quit()
                               
                              function frit(gg)
                              frit = FormatNumber(fso.GetDrive(gg.DriveLetter).FreeSpace/1048576, 1)
                              End function


                            Вопрос: что модифицировать нужно,чтобы скрипт выводил данные в процентах? И как сделать чтобы при превышении определенного порога % свободного пространства скрипт отсылал предупреждающее ( о том что, допустим, на системном диске 0% свободно) сообщение на мыло?
                            Сообщение отредактировано: Alexsz -
                              Цитата Alexsz @
                              что модифицировать нужно,чтобы скрипт выводил данные в процентах?

                              Получить не только объём свободного пространства (FreeSpace), но и полный объём (TotalSize). Поделить одно на другое. Умножить на 100. Добавить в конце символ "%".
                              Цитата Alexsz @
                              как сделать чтобы при превышении определенного порога % свободного пространства скрипт отсылал предупреждающее ( о том что, допустим, на системном диске 0% свободно) сообщение на мыло?

                              Задействовать SimpleMAPI. См. "Microsoft Collaboration Data Objects Programmer's Reference" в MSDN.
                              Сообщение отредактировано: Akina -
                                Спасибо Akina за совет!
                                Получилось следующее:

                                ExpandedWrap disabled
                                  Const AlertHigh = .9                    
                                  Const emailFrom = "xx@xxx.ru"        
                                  Const emailTo = "xx@xxx.ru"          
                                  Const MailServer = "mail.xxx.ru"
                                  Const WaitTimeInMinutes = 1                
                                   
                                  Dim strMessage
                                  Dim arrServerList
                                   
                                  arrServerList = array("server name")    
                                   
                                  Do until i = 2
                                        strMessage = ""
                                      
                                       PollServers(arrServerList)
                                      
                                        if strMessage <> "" then
                                          EmailAlert(strMessage)
                                      end if
                                      
                                         WScript.Sleep(WaitTimeInMinutes*60000)
                                   
                                  Loop
                                   
                                  Sub PollServers(arrServers)
                                      on error resume next
                                      for each Server in arrServers
                                          set objSvc = GetObject("winmgmts:{impersonationLevel=impersonate}//" & Server & "/root/cimv2")
                                          set objRet = objSvc.InstancesOf("win32_LogicalDisk")
                                          for each item in objRet
                                              if item.DriveType = 7 then
                                                  end if
                                                  if item.FreeSpace/item.size <= AlertHigh then
                                                      strMessage = strMessage & UCase(Server) & ": Alert, drive '" & item.caption & "' is low on HDD space!  There are " & FormatNumber((item.FreeSpace/1024000),0) & " MB free <7%" & vbCRLF
                                                  end if
                                          next
                                      next
                                      set objSvc = Nothing
                                      set objRet = Nothing
                                  End Sub
                                   
                                  Sub EmailAlert(Message)
                                      on error resume next
                                      Set objMessage = CreateObject("CDO.Message")
                                      with objMessage
                                          .From = emailFrom
                                          .To = emailTo
                                          .Subject = "Low Disk Space Update"
                                          .TextBody = Message
                                          .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
                                          .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = MailServer
                                          .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
                                          .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxx"
                                          .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxx"
                                          .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
                                          .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
                                          .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
                                          .Configuration.Fields.Update
                                          .Send
                                      end with
                                      Set objMessage = Nothing
                                  End Sub

                                Подскажите пожалуйста, как написать скрипт, который содавал бы файл и постоянно записывал туда текстовую информацию (вообще не важно какую), главное чтобы скрипт записывал инфу постоянно, тем самым увеличивая (постоянно) размер файла..?
                                (нужно для того чтобы протестировать данный скрипт)
                                Сообщение отредактировано: Alexsz -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (22) « Первая ... 15 16 [17] 18 19 ...  21 22


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0535 ]   [ 14 queries used ]   [ Generated: 20.05.24, 09:21 GMT ]