Search code examples
formattingoutputwmic

WMIC translation table


Where can I get documentation about translation tables, used in WMIC /TRANSLATE switch? As I have found, there are only two tables, shipped with WMIC: BasicXml and NoComma. How can I manage the tables: list them, view, add, delete, rename? Which format does they have? I suppose, when I use the tables, there are only single character replacing rules. Or some other rules may apply?


Solution

  • These translation tables come from MSFT_CliTranslateTable and MSFT_CliTranslateTableEntry classes. Those are defined (and poorly documented) in C:\Windows\System32\wbem\cli.mof file.

    …
    [Abstract] 
    class MSFT_CliTranslateTableEntry
    {
      string FromValue;
      string ToValue;
    };
    
    class MSFT_CliTranslateTable
    {
      [key] string Name;
      MSFT_CliTranslateTableEntry Tbl[];
    };
    …
    

    Example using wmic:

    ==> wmic /NAMESPACE:\\root\cli PATH MSFT_CliTranslateTable get
    Name                                                                                     
    NoComma                                                                                  
                  {}  2    MSFT_CliTranslateTableEntry    MSFT_CliTranslateTableEntry  2  ,  
    BasicXml                                                                                 
                  {}  2    MSFT_CliTranslateTableEntry    MSFT_CliTranslateTableEntry  2  >  >
                  {}  2    MSFT_CliTranslateTableEntry    MSFT_CliTranslateTableEntry  2  &lt;  <
    

    Another example using wmic:

    ==> wmic /NAMESPACE:\\root\cli PATH MSFT_CliTranslateTable get /Value | findstr "^$ Name __CLASS FromValue ToValue"
    
    Name=NoComma
    
    __CLASS=MSFT_CliTranslateTableEntry
    FromValue=,
    ToValue=
    
    Name=BasicXml
    
    __CLASS=MSFT_CliTranslateTableEntry
    FromValue=&amp;gt;
    ToValue=&gt;
    
    __CLASS=MSFT_CliTranslateTableEntry
    FromValue=&amp;lt;
    ToValue=&lt;
    

    Extra example using powershell:

    PS D:\PShell> 
    $comp      = $env:COMPUTERNAME
    $namespace = "ROOT\Cli"
    $classname = "MSFT_CliTranslateTable"
    
    $instances = Get-WmiObject -Class $classname -ComputerName $comp -Namespace $namespace
    
    $instances |
      ForEach-Object { $_ |
        Select-Object -Property @{N='RELPATH';     E={$_.__RELPATH}}, 
                                @{N='TrTableName'; E={$_.Name}} -ExpandProperty Tbl
      } | Format-Table -Property TrTableName, FromValue, ToValue, __CLASS #, RELPATH
    

    Output:

    TrTableName FromValue ToValue __CLASS                    
    ----------- --------- ------- -------                    
    NoComma     ,                 MSFT_CliTranslateTableEntry
    BasicXml    &gt;      >       MSFT_CliTranslateTableEntry
    BasicXml    &lt;      <       MSFT_CliTranslateTableEntry