Pergunta
Temos um projeto .NET que usa WMI e está interessado em portá-la para o quadro Mono.
Parece Mono não suporta WMI.
Existem quaisquer bibliotecas que podem adicionar suporte a WMI?
Basicamente, gostaria de acessar um servidor Windows usando WMI a partir de uma caixa de Linux / OS X.
Solução
Windows Management Instrumentation é uma implementação da Microsoft de WBEM ( Web-Based Enterprise Management ) .
Existem open-source implementações (por exemplo OpenPegasus ) que você pode ser capaz de usar um cliente, mas não há como dizer o que MS fez com sua versão. Se você pode enviar consultas CIM para o servidor, então você pode obter bons resultados.
Note que o Windows não faz WMI via HTTP, única DCOM / DCE-RPC, então alguns clientes simplesmente não vai funcionar. Um Google rápido .. e OpenPegasus lhe permitirá o acesso do Windows usando um WMI Mapper . Se não, você sempre pode correr o componente de servidor no Windows.
Outras dicas
Em relação WMI via HTTP, dê uma olhada WinRM , o que parece ser uma implementação de WS-Management para XP, Win2003, Win2008, e Vista. Isto define uma maneira de acessar Common Information Model (CIM) informações sobre HTTP (S) (SABONETE). CIM é definido pelo DMTF e WMI é a implementação da CIM, da Microsoft.
Se eu ler a sopa de letrinhas corretamente, você deve ser capaz de usar SOAP do Linux para o acesso WinRM (WS-Management) em uma máquina Windows, proporcionando assim o acesso ao WMI (desde que WinRM está instalado, em execução, e não com firewall).
Se a execução de um tal coisa em uma rede corporativa será permitido pela TI / Segurança é outra questão entierely: qualquer porta aberta pode ser um risco de segurança e que permite o comando, controle e configuração do projeto pode ser um buraco. Certificados, IPSec, e escopo regras de firewall são seu amigo!
Note que não tenho experiência direta usando o WS-Management, nem WinRM, então YMMV .
Eu sei que você pode instalar WMI-client no Linux (sudo apt-get install wmi-cliente). Você deve ser capaz de consultar qualquer objeto WMI em uma caixa de Windows a partir da linha de comando do Linux usando isso.