Установить удаленное время через WMI (вызвать Win32_OperatingSystem.SetDateTime ())

489
George Sovetov

Цель состоит в том, чтобы сделать запрос XML / SOAP / WSMan из Python и Linux и установить время на удаленной машине с Windows 10.

Я могу сделать это через CMD, PowerShell или Cygwin / SSH, но мне нужен быстрый родной путь. Я много делаю через WMI, это проще и быстрее.

Я пытаюсь вызвать Win32_OperatingSystem.SetDateTime.
Ответ SOAP / WSMan содержит:The SOAP XML in the message does not match the corresponding XML schema definition. Change the XML and retry. (extended fault data: )

Я пытался выполнить аналогичную задачу вручную как на локальных, так и на удаленных машинах. Результаты одинаковы.

Через 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) 

Через WinRM:

C:\Users\Administrator>winrm invoke SetDateTime wmicimv2/Win32_OperatingSystem @ 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. 

С помощью командлетов PowerShell WMI:

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 

Если я изменяю формат строки, я получаю Type Error. Только с таким форматом, который кажется правильным, я получаю Invalid method Parameter(s).

Также я получаю Invalid method Parameter(s)при выполнении из WBEMTest.

Я исследовал типы методов с WBEMTest. Тип параметра есть CIM_DATETIME. Что с этим не так? Как изменить время на удаленной машине?

Как установить время через WMI?

Что такое «соответствующее определение схемы» и как его получить?

0

2 ответа на вопрос

1
Vitali Kuzniatsou

Через WMIC: я noob в wmic используя, но я нашел команду с своего рода фильтрацией, вот так:

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

Я проверил, и это действительно работает. Итак, я думаю, что это должно быть то же самое с использованием удаленного вызова /node. Я надеюсь, что это будет полезно для вас.

Вот источник кода: ссылка

По-видимому, два отличия - это аргумент `/ node` и условие` where (1) `. Когда я вернусь к этому проекту, я обязательно проверю оба. Благодарю. George Sovetov 5 лет назад 0
0
George Sovetov

Я не мог заставить его работать, wmicно этот XML работает для меня:

<?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> 

Это тот же формат, которым отвечает WMI Win32_OperatingSystem, например, при получении .