Ad Widget

Collapse

Помогите с кодировкой в Autodiscovery

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • xeonkeeper
    Junior Member
    • Sep 2012
    • 27

    #1

    Помогите с кодировкой в Autodiscovery

    Есть скрипт автодискавери для DFSR
    Code:
    dim strComputer, strLine, n, k, i
    
    Set wshNetwork = WScript.CreateObject( "WScript.Network" )
    strComputer = wshNetwork.ComputerName
    
    Set oWMIService = GetObject("winmgmts:\\" & strComputer & "\root\MicrosoftDFS")
    Set colRGroups = oWMIService.ExecQuery("SELECT * FROM DfsrReplicationGroupConfig")
    wscript.echo "{"
    wscript.echo "        ""data"":["
    n=0
    k=0
    i=0
    For Each oGroup in colRGroups
      n=n+1
      Set colRGFolders = oWMIService.ExecQuery("SELECT * FROM DfsrReplicatedFolderConfig WHERE ReplicationGroupGUID='" & oGroup.ReplicationGroupGUID & "'")
      For Each oFolder in colRGFolders
        k=k+1
        Set colRGConnections = oWMIService.ExecQuery("SELECT * FROM DfsrConnectionConfig WHERE ReplicationGroupGUID='" & oGroup.ReplicationGroupGUID & "'")
        For Each oConnection in colRGConnections
          i=i+1
          binInbound = oConnection.Inbound
          strPartner = oConnection.PartnerName
          strRGName = oGroup.ReplicationGroupName
          strRFName = oFolder.ReplicatedFolderName
          If oConnection.Enabled = True and binInbound = False Then
            strSendingComputer = strComputer
            strReceivingComputer = strPartner
            strLine1="                {"    
            strLine2="                        ""{#GROUP}"":""" & strRGName & """," 
            strLine3="                        ""{#FOLDER}"":""" & strRFName & """," 
            strLine4="                        ""{#SENDING}"":""" & strSendingComputer & ""","                  
            if (n < colRGroups.Count) or (k < colRGFolders.count) or (i < colRGConnections.Count) then
              strLine5="                        ""{#RECEIVING}"":""" & strReceivingComputer & """},"
            else
              strLine5="                        ""{#RECEIVING}"":""" & strReceivingComputer & """}]}"       
            end if		
            wscript.echo strLine1
            wscript.echo strLine2
            wscript.echo strLine3
            wscript.echo strLine4
            wscript.echo strLine5	   
          End If
        Next
      Next
    Next
    При выполнении его через zabbix_get он кириллицу возвращает каракозяброй. В Powershell скриптах я эту проблему решил через функцию конвертации "CP866" в "UTF-8". Но в VBS я не силен...
  • Andrey Dyukin
    Junior Member
    • Jul 2015
    • 22

    #2
    Я вот такую функцию использовал для перекодировки в UTF-8

    Code:
    strResult = convert(strResult, "UTF-8", "CP866")
    strResult = Mid(Trim(strResult),4)
    Call WScript.Echo(strResult)
    
    function convert(txt, srcCharset, dstCharset)
    set stream = createobject("ADODB.Stream")
    with stream
    .Type = 2 : .Mode = 3 : .Charset = srcCharset
    .Open
    .WriteText txt, 0
    .Position = 0
    .Charset = dstCharset : convert = .ReadText
    end with
    end function

    Comment

    • xeonkeeper
      Junior Member
      • Sep 2012
      • 27

      #3
      Спасибо, только я настолько нольв в vbs, что даже не знаю куда её вставить =)

      Comment

      • Andrey Dyukin
        Junior Member
        • Jul 2015
        • 22

        #4
        Я тоже не очень, но предполагаю что нужно вместо каждого strLine, который возвращает данные. И причем заменить strResult на strLine.

        Comment

        Working...