Use o WMI-Client aqui: link e execute os comandos da WMIC diretamente do Linux, embora você tenha que usar o Equivalentes WQL de seus comandos, pois esta versão não suporta as consultas não-WQL.
Usamos o winexe para executar comandos em nossas máquinas Windows do Linux. Por exemplo:
winexe -A authfile //syspc4.domain.com "ipconfig /all"
Espera-se que o acima mostre a mesma coisa como se você tivesse executado o cmd.exe em uma máquina Windows e digitado "ipconfig / all"
Meu objetivo final é remotamente (do Linux) obter o número de série e o nome do modelo das máquinas do Windows. Isso é muito fácil de conseguir com os dois comandos a seguir em cmd.exe localmente na máquina Windows (Windows XP):
wmic bios get serialnumber
wmic computersystem get model
No entanto, qualquer tentativa de executar isso via winexe simplesmente não funciona --- depois de apertar enter, nada acontece. Nenhum erro, nada. Ele parecerá estar congelado até que eu ctrl + c dele.
Aqui estão os comandos que eu tentei:
winexe -A authfile //syspc4.domain.com "wmic bios get serialnumber"
winexe -A authfile //syspc4.domain.com "cmd wmic bios get serialnumber"
winexe -A authfile //syspc4.domain.com "cmd /c wmic bios get serialnumber"
winexe -A authfile //syspc4.domain.com "cmd"
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\WINDOWS\system32>wmic bios get serialnumber
Em todos os casos, sem resposta. Uma rápida olhada no winexe --help revela uma opção de log, mas mesmo com esse conjunto, não há log de saída de qualquer tipo.
Encontrei o seguinte post em outro fórum, no qual a pessoa está perguntando quase exatamente o mesmo que eu, e naturalmente ele nunca recebeu uma resposta: link
EDIT : com a depuração ativada, este é o local onde ela é interrompida:
winexe -d 6 -A authfile //syspc4.domain.com "wmic bios get serialnumber"
...
IN: async_open(\pipe\ahexec, 2)
IN: async_open_recv
CTRL: Sending command: get version
CTRL: Sending command: run wmic bios get serialnumber
CTRL: Recieved command: std_io_err 15C40030
IN: async_open(\pipe\ahexec_stdin15C40030, 2)
IN: async_open(\pipe\ahexec_stdout15C40030, 2)
IN: async_open(\pipe\ahexec_stderr15C40030, 2)
IN: async_open_recv
IN: async_open_recv
IN: async_open_recv
**hangs forever here**
Then ctrl+c:
^CAborting...
ERROR: smb_raw_read_recv - NT_STATUS_PIPE_DISCONNECTED
ERROR: smb_raw_read_recv - NT_STATUS_PIPE_DISCONNECTED
ERROR: smb_raw_read_recv - NT_STATUS_PIPE_DISCONNECTED
ERROR: smb_raw_read_recv - NT_STATUS_PIPE_DISCONNECTED
ERROR: on_ctrl_pipe_error - NT_STATUS_PIPE_DISCONNECTED
No entanto, o curioso é que, mesmo com um comando que não falha (como ipconfig / all), ele fornece exatamente a mesma coisa:
...
IN: async_open(\pipe\ahexec, 2)
IN: async_open_recv
CTRL: Sending command: get version
CTRL: Sending command: run ipconfig /all
CTRL: Recieved command: std_io_err 15C40031
IN: async_open(\pipe\ahexec_stdin15C40031, 2)
IN: async_open(\pipe\ahexec_stdout15C40031, 2)
IN: async_open(\pipe\ahexec_stderr15C40031, 2)
IN: async_open_recv
IN: async_open_recv
IN: async_open_recv
Windows IP Configuration
...
ERROR: smb_raw_read_recv - NT_STATUS_PIPE_DISCONNECTED
ERROR: smb_raw_read_recv - NT_STATUS_PIPE_DISCONNECTED
ERROR: smb_raw_read_recv - NT_STATUS_PIPE_DISCONNECTED
ERROR: smb_raw_read_recv - NT_STATUS_PIPE_DISCONNECTED
ERROR: on_ctrl_pipe_error - NT_STATUS_PIPE_DISCONNECTED
Use o WMI-Client aqui: link e execute os comandos da WMIC diretamente do Linux, embora você tenha que usar o Equivalentes WQL de seus comandos, pois esta versão não suporta as consultas não-WQL.
O código mais recente do winexe (do repositório git "atual", a.k.a. "winexe-waf"; data de novembro de 2013) não trava ao testá-lo. Eu construo o winexe no Debian Wheezy com pacotes Samba 4.0.10 da Unstable e executo winexe -U "<user>%<pwd>" //192.168.1.2 'wmic bios get serialnumber'
, onde 192.168.1.2 é o endereço IP de uma máquina virtual do VirtualBox que executa o Windows 7 Professional SP1. A saída é a seguinte.
$ winexe -U "<user>%<pwd>" //192.168.1.2 'wmic bios get serialnumber'
SerialNumber
0
$ winexe -U "<user>%<pwd>" //192.168.1.2 'wmic computersystem get model'
Model
VirtualBox
Eu tentaria esses comandos com a opção de depuração winexe
ativada. Você pode aumentar o nível de depuração (parece ser um número como 0,1,2,3, etc.).
Aqui estou apenas executando o comando como está, exceto que adicionei a opção -d 3
.
$ winexe -A authfile -d 3 //syspc4.domain.com "wmic bios get serialnumber"
ERROR: Unable to open credentials file!
[param/loadparm.c:587:init_globals()] Initialising global parameters
[param/loadparm.c:2462:lp_load()] lp_load: refreshing parameters from /dev/null
[param/params.c:556:pm_process()] params.c:pm_process() - Processing configuration file "/dev/null"
[param/loadparm.c:1343:lp_add_hidden()] adding hidden service IPC$
[param/loadparm.c:1343:lp_add_hidden()] adding hidden service ADMIN$
[auth/credentials/credentials_krb5.c:171:cli_credentials_set_ccache()] failed to get principal from default ccache: No such file or directory: open(/tmp/krb5cc_500): No such file or directory
[winexe/winexe.c:304:main()] winexe version 0.80
This program may be freely redistributed under the terms of the GNU GPL
[auth/auth.c:447:auth_register()] AUTH backend 'winbind_samba3' registered
[auth/auth.c:447:auth_register()] AUTH backend 'winbind' registered
[auth/auth.c:447:auth_register()] AUTH backend 'name_to_ntstatus' registered
[auth/auth.c:447:auth_register()] AUTH backend 'fixed_challenge' registered
[auth/auth.c:447:auth_register()] AUTH backend 'unix' registered
[auth/auth.c:447:auth_register()] AUTH backend 'anonymous' registered
[auth/auth.c:447:auth_register()] AUTH backend 'sam' registered
[auth/auth.c:447:auth_register()] AUTH backend 'sam_ignoredomain' registered
[auth/gensec/gensec.c:1229:gensec_register()] GENSEC backend 'krb5' registered
[auth/gensec/gensec.c:1205:gensec_register()] gensec subsystem fake_gssapi_krb5 is disabled
[auth/gensec/gensec.c:1229:gensec_register()] GENSEC backend 'schannel' registered
[auth/gensec/gensec.c:1229:gensec_register()] GENSEC backend 'spnego' registered
[auth/gensec/gensec.c:1205:gensec_register()] gensec subsystem gssapi_spnego is disabled
[auth/gensec/gensec.c:1229:gensec_register()] GENSEC backend 'gssapi_krb5' registered
[auth/gensec/gensec.c:1229:gensec_register()] GENSEC backend 'gssapi_krb5_sasl' registered
[auth/gensec/gensec.c:1229:gensec_register()] GENSEC backend 'ntlmssp' registered
[lib/util/util.c:334:interpret_addr()] sys_gethostbyname: Unknown host. syspc4.domain.com
[lib/socket/interface.c:103:add_interface()] added interface ip=192.168.1.110 nmask=255.255.255.0
[winexe/winexe.c:322:main()] ERROR: Failed to open connection - NT_STATUS_NO_MEMORY