Defina a hora remota via WMI (chamar Win32_OperatingSystem.SetDateTime ())

0

O objetivo é fazer a solicitação XML / SOAP / WSMan do Python e do Linux e definir a hora na máquina remota do Windows 10.

Eu posso fazer isso via CMD, PowerShell ou Cygwin / SSH, mas preciso de um modo nativo rápido. Eu estou fazendo muito via WMI, é mais simples e rápido.

Eu tento invocar Win32_OperatingSystem.SetDateTime .
Resposta SOAP / WSMan contém: The SOAP XML in the message does not match the corresponding XML schema definition. Change the XML and retry. (extended fault data: {u'fault_subcode': 'w:SchemaValidationError', u'fault_code': 's:Sender', u'wsmanfault_code': '2150858817', 'transport_message': u'Bad HTTP response returned from server. Code 500', 'http_status_code': 500})

Eu tentei realizar tarefas semelhantes manualmente em computadores locais e remotos. Os resultados são os mesmos.

Via WMIC:

C:\Users\Administrator>wmic /node:10.254.251.2 os call SetDateTime 20180517141043.945000+000
Executing (Win32_OperatingSystem)->SetDateTime()
ERROR:
Description = Invalid method Parameter(s)

Via WinRM:

C:\Users\Administrator>winrm invoke SetDateTime wmicimv2/Win32_OperatingSystem @{LocalDateTime="20170505080808.123123+120"}
WSManFault
    Message
        ProviderFault
            WSManFault
                Message = The WS-Management service cannot process the request. The element for a datetime value must have exactly one child and no mixed content.

Error number:  -2144108479 0x80338041
The SOAP XML in the message does not match the corresponding XML schema definition. Change the XML and retry.

Os cmdlets WMI da Via PowerShell:

PS C:\Users\Administrator> Invoke-WmiMethod -Class Win32_OperatingSystem -Name SetDateTime -ArgumentList '20180517133310.323710+000' -ComputerName 10.254.251.2
Invoke-WmiMethod : Invalid method Parameter(s) 
At line:1 char:1
+ Invoke-WmiMethod -Class Win32_OperatingSystem -Name SetDateTime -Argu ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Invoke-WmiMethod], ManagementException
    + FullyQualifiedErrorId : InvokeWMIManagementException,Microsoft.PowerShell.Commands.InvokeWmiMethod

Se eu alterar o formato da string, receberei Type Error . Apenas com este formato, que parece estar correto, recebo Invalid method Parameter(s) .

Também recebo Invalid method Parameter(s) ao executar a partir de WBEMTest .

Eu explorei tipos de métodos com WBEMTest . O tipo de parâmetro é CIM_DATETIME . O que há de errado com isso? Como mudo o tempo na máquina remota?

Como faço para definir o tempo via WMI?

Qual é a "definição de esquema correspondente" e como posso obtê-la?

    
por George Sovetov 17.05.2018 / 16:42

2 respostas

1

Por WMIC: Estou usando o noob no wmic, mas achei o comando com um tipo de filtragem assim:

wmic os where(primary=1) call setdatetime 20070731144642.555555+480

Eu verifiquei e realmente funciona. Então, eu acho que deveria ser o mesmo com as chamadas remotas usando /node . Espero que seja útil para você.

Aqui, a fonte do código: link

    
por 28.07.2018 / 12:19
0

Eu não consegui fazer funcionar com wmic , mas esse XML funciona para mim:

<?xml version="1.0" ?>
<env:Envelope xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:b="http://schemas.dmtf.org/wbem/wsman/1/cimbinding.xsd" xmlns:cfg="http://schemas.microsoft.com/wbem/wsman/1/config" xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:n="http://schemas.xmlsoap.org/ws/2004/09/enumeration" xmlns:p="http://schemas.microsoft.com/wbem/wsman/1/wsman.xsd" xmlns:rsp="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd" xmlns:x="http://schemas.xmlsoap.org/ws/2004/09/transfer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <env:Header>
    <w:OperationTimeout>PT00H02M00.000S</w:OperationTimeout>
    <a:To>http://windows-host:5985/wsman</a:To>
    <w:SelectorSet/>
    <w:MaxEnvelopeSize mustUnderstand="true">153600</w:MaxEnvelopeSize>
    <w:ResourceURI mustUnderstand="true">http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_OperatingSystem</w:ResourceURI>
    <a:Action mustUnderstand="true">http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_OperatingSystem/SetDateTime</a:Action>
    <p:DataLocale mustUnderstand="false" xml:lang="en-US"/>
    <a:ReplyTo>
      <a:Address mustUnderstand="true">http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address>
    </a:ReplyTo>
    <a:MessageID>uuid:52029873-fef3-4f08-ba32-57827df5fb2c</a:MessageID>
    <w:Locale mustUnderstand="false" xml:lang="en-US"/>
  </env:Header>
  <env:Body>
    <SetDateTime_INPUT xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:p="http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_OperatingSystem" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <p:LocalDateTime>
        <cim:Datetime>2018-07-21T19:51:34.365502Z</cim:Datetime>
      </p:LocalDateTime>
    </SetDateTime_INPUT>
  </env:Body>
</env:Envelope>

Este é o mesmo formato com o qual o WMI responde ao obter Win32_OperatingSystem , por exemplo.

    
por 29.10.2018 / 20:54

Tags