Продолжаю биться с кодировками в 1.8 по всем фронтам (в основом головой, и в основном об стену)
Теперь вот такая проблема вылезла....
В папочке с агентом 1.8 лежит скрипт uAllPrograms.vbs, который выводит значения для следующего параметра, которые прописан в .conf файле
UserParameter=uAllPrograms, cscript.exe /nologo "C:\Program Files\Zabbix Agent\uAllPrograms.vbs"
( в данном случае скрипт выплевывает этот список установленных программ при помощи WScript.Echo string, так вот, как бы я не пытался, у меня всегда этот аутпут получается в кодировке виндовой, т.е cp1251, когда по новой схеме полагается чтобы все было utf-8 ( кроме eventlog[], где все замечательно работает и так)
В итоге, на стороне сервера в /tmp/zabbix_server.log я вижу что допустим 10ая программа в списке отображается абракадаброй(не утф8), а во фронтэнде так вообще на этой программе список обрывается, т.е. показывает список только из первых 10 программ, хотя за 10, что по-русски написана там идет еще 20 с английскими названиями... ну так вот... Как же все таки теперь получать правильно русские буковки с виндусовой машины?
Вот например есть скрипт
Он берет список программ из функции InstalledApplications а затем конвертирует его в utf8 и выплевывает при помощи Wscript.Echo а также пишет в файл uAllPrograms.txt.
Так вот, когда он выплевывает этот текст через Echo, то это все равно cp1251 а вот зато я открываю файл - и там на самом деле utf8!
То есть конвертилка работает, но почему-то только для файлов...
Const adTypeBinary = 1
Const adTypeText = 2
Const bOverwrite = True
Const bAsASCII = False
Dim oFS : Set oFS = CreateObject( "Scripting.FileSystemObject" )
Dim Output
Dim sTFSpec : sTFSpec = oFS.GetAbsolutePathName( "allPrograms_utf8.txt" )
Dim oFrom : Set oFrom = CreateObject( "ADODB.Stream" )
Dim sFrom : sFrom = "windows-1251"
Dim oTo : Set oTo = CreateObject( "ADODB.Stream" )
Dim sTo : sTo = "utf-8"
If oFS.FileExists( sTFSpec ) Then oFS.DeleteFile sTFSpec
oFrom.Type = adTypeText
oFrom.Charset = sFrom
oFrom.Open
oFrom.WriteText InstalledApplications(".")
oFrom.Position=0
oTo.Type = adTypeText
oTo.Charset = sTo
oTo.Open
oTo.WriteText oFrom.ReadText
oTo.Position=0
Output= oTo.ReadText
oTo.SaveToFile sTFSpec
WScript.Echo Output
oFrom.Close
oTo.Close
'##########################FUNCTION GET PROGRAMS LIST#######################
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
Народ, наверняка уже столкнулся кто-то с подобными проблемами, если нужно русский текст с Win32 забрать...как это решить, мне кажется что я сильно запутался с кодировками...
Теперь вот такая проблема вылезла....
В папочке с агентом 1.8 лежит скрипт uAllPrograms.vbs, который выводит значения для следующего параметра, которые прописан в .conf файле
UserParameter=uAllPrograms, cscript.exe /nologo "C:\Program Files\Zabbix Agent\uAllPrograms.vbs"
( в данном случае скрипт выплевывает этот список установленных программ при помощи WScript.Echo string, так вот, как бы я не пытался, у меня всегда этот аутпут получается в кодировке виндовой, т.е cp1251, когда по новой схеме полагается чтобы все было utf-8 ( кроме eventlog[], где все замечательно работает и так)
В итоге, на стороне сервера в /tmp/zabbix_server.log я вижу что допустим 10ая программа в списке отображается абракадаброй(не утф8), а во фронтэнде так вообще на этой программе список обрывается, т.е. показывает список только из первых 10 программ, хотя за 10, что по-русски написана там идет еще 20 с английскими названиями... ну так вот... Как же все таки теперь получать правильно русские буковки с виндусовой машины?
Вот например есть скрипт
Он берет список программ из функции InstalledApplications а затем конвертирует его в utf8 и выплевывает при помощи Wscript.Echo а также пишет в файл uAllPrograms.txt.
Так вот, когда он выплевывает этот текст через Echo, то это все равно cp1251 а вот зато я открываю файл - и там на самом деле utf8!
То есть конвертилка работает, но почему-то только для файлов...
Const adTypeBinary = 1
Const adTypeText = 2
Const bOverwrite = True
Const bAsASCII = False
Dim oFS : Set oFS = CreateObject( "Scripting.FileSystemObject" )
Dim Output
Dim sTFSpec : sTFSpec = oFS.GetAbsolutePathName( "allPrograms_utf8.txt" )
Dim oFrom : Set oFrom = CreateObject( "ADODB.Stream" )
Dim sFrom : sFrom = "windows-1251"
Dim oTo : Set oTo = CreateObject( "ADODB.Stream" )
Dim sTo : sTo = "utf-8"
If oFS.FileExists( sTFSpec ) Then oFS.DeleteFile sTFSpec
oFrom.Type = adTypeText
oFrom.Charset = sFrom
oFrom.Open
oFrom.WriteText InstalledApplications(".")
oFrom.Position=0
oTo.Type = adTypeText
oTo.Charset = sTo
oTo.Open
oTo.WriteText oFrom.ReadText
oTo.Position=0
Output= oTo.ReadText
oTo.SaveToFile sTFSpec
WScript.Echo Output
oFrom.Close
oTo.Close
'##########################FUNCTION GET PROGRAMS LIST#######################
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


Comment