Ad Widget

Collapse

zabbix_agent. Проблема с кодировкой

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Abdulla
    Junior Member
    • Nov 2009
    • 2

    #1

    zabbix_agent. Проблема с кодировкой

    Доброго времени суток! Прошу помощи в решении вопроса.
    Возникла необходимость извлекать из рабочих станций перечень установленного ПО. Для этого использую командный файл do.bat, который, в свою очередь, запускает VBS скрипт test.vbs.
    Содержимое do.bat
    cscript C:\test.vbs
    Содержимое test.vbs (выводит в stdout перечень установленного ПО)
    sComputer="localhost"
    Wscript.StdOut.Write InstalledApplications(sComputer)

    Function InstalledApplications(node)
    Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
    Set oRegistry = _
    GetObject("winmgmts:{impersonationLevel=impersonat e}!\\" _
    & node & "/root/default:StdRegProv")
    sBaseKey = _
    "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\"
    iRC = oRegistry.EnumKey(HKLM, sBaseKey, arSubKeys)
    For Each sKey In arSubKeys
    iRC = oRegistry.GetStringValue( _
    HKLM, sBaseKey & sKey, "DisplayName", sValue)
    If iRC <> 0 Then
    oRegistry.GetStringValue _
    HKLM, sBaseKey & sKey, "QuietDisplayName", sValue
    End If
    If sValue <> "" Then
    InstalledApplications = _
    InstalledApplications & sValue & vbCrLf
    End If
    Next
    End Function
    При выполнении на раб. станции
    zabbix_agentd -t system.run[C:\do.bat]
    возникают проблемы с отображением названий программ на русском языке. Если запустить вручную из консоли C:\do.bat, то русские названия отображаются без проблем. Что можно предпринять для корректного отображения русских символов?
    Click image for larger version

Name:	pict.JPG
Views:	1
Size:	11.6 KB
ID:	315254
  • Hamer13
    Junior Member
    • Oct 2009
    • 28

    #2
    íóæíî ïåðåêîäèðîâàòü ðóññêèå ñèìâîëû â utf8. ÿ óæå íå ïîìíþ òî÷íî, íàñêîëüêî ëåãêî ýòî ñäåëàòü ñðåäñòàìè WSH, íî ìîæíî èñïîëüçîâàòü ëþáóþ êîíñîëüíóþ óòèëèòêó. êàêóþ èìåííî ïîä âèíäó - íå âñïîìíþ, ÿ óæå ãîäà 3 âèíäàìè íå çàíèìàþñü âîîáùå. ìîæíî åù¸ cygwin íàõëîáó÷èòü è èñïîëüçîâàòü òàìîøíèé iconv. èçâðàùåíèå, êîíå÷íî, íî êàê âàðèàíò...

    Comment

    • gospodin.horoshiy
      Senior Member
      • Sep 2008
      • 272

      #3
      Используй функцию типа strConvert (внизу скрипта)

      WScript.Echo strConvert(InstalledApplications("."),"Windows-1251","cp866")

      Function InstalledApplications(node)
      Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
      Set oRegistry = GetObject("winmgmts://" _
      & node & "/root/default:StdRegProv")
      sBaseKey = _
      "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\"
      iRC = oRegistry.EnumKey(HKLM, sBaseKey, arSubKeys)

      For Each sKey In arSubKeys

      iRC = oRegistry.GetStringValue( _
      HKLM, sBaseKey & sKey, "DisplayName", sValue)
      If iRC <> 0 Then
      oRegistry.GetStringValue _
      HKLM, sBaseKey & sKey, "QuietDisplayName", sValue
      End If
      If sValue <> "" and instr(sValue, "KB")=0 and instr(InstalledApplications, sValue&vbCrLf)=0 Then
      InstalledApplications = _
      InstalledApplications & sValue & vbCrLf
      End If
      Next
      End Function

      '================================================= ============================
      Function StrConvert(strText, strSourceCharset, strDestCharset)
      Const adTypeText = 2
      Const adModeReadWrite = 3

      Dim objStream

      Set objStream = WScript.CreateObject("ADODB.Stream")

      With objStream
      .Type = adTypeText
      .Mode = adModeReadWrite

      .Open
      .Charset = strSourceCharset
      .WriteText strText
      .Position = 0
      .Charset = strDestCharset
      strConvert = .ReadText
      End With

      Set objStream = Nothing
      End Function
      '================================================= ============================
      Только у меня сделано так, что на сервер приходит инфа от агента в cp1251, а сервер ее уже сам переделывает в utf8 и кладет в таком виде в базу.
      Zbx 2.0.4 on Debian and MYSQL5 on Ubuntu Server 64bit 8.04,
      200+ Win Agents, 50+ Linux Agents, 150+ Network Devices

      Comment

      • Hamer13
        Junior Member
        • Oct 2009
        • 28

        #4
        à strConvert ðàçâå íå ìîæåò ñðàçó â óòô8? òîãäà íå ïðèøëîñü áû ñåðâåðíóþ ÷àñòü äîïèëèâàòü.

        Comment

        • gospodin.horoshiy
          Senior Member
          • Sep 2008
          • 272

          #5
          может конечно. Вот только я еще с винды eventlog забираю, а их как конвертировать на стороне агента? Так что все в один поток cp1251 загоняю.....
          Zbx 2.0.4 on Debian and MYSQL5 on Ubuntu Server 64bit 8.04,
          200+ Win Agents, 50+ Linux Agents, 150+ Network Devices

          Comment

          • Hamer13
            Junior Member
            • Oct 2009
            • 28

            #6
            õì. à êàêèì ñïîñîáîì ïîòîì ýòî 1251 â óòô8 ïðåîáðàçóåøü? ñèøíûé êîä ñåðâåðà ìåíÿë?

            Comment

            • gospodin.horoshiy
              Senior Member
              • Sep 2008
              • 272

              #7
              да, одну строчку...


              Решение корявое, но меня устраивает, сижу вот жду когда 1.8 выйдет с полной поддержкой utf8
              Zbx 2.0.4 on Debian and MYSQL5 on Ubuntu Server 64bit 8.04,
              200+ Win Agents, 50+ Linux Agents, 150+ Network Devices

              Comment

              Working...