Я пытаюсь написать скрипт Powershell для работы с API-интерфейсом Microsoft, и, будучи новичком в этом, я столкнулся с ошибкой, которую, похоже, не могу пройти.
Ошибка:
Cannot find an overload for "UpdateDeviceValues" and the argument count: "3".
At C:\PowerShellScripts\API-UpdateDeviceValues-ICC.ps1:13 char:37
+ $accounts = $pmws.UpdateDeviceValues <<<< ('18B81F1FD790','DisableICC','True');
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
Судя по моим поискам, API требует, чтобы ему было отправлено три значения, но это то, что я отправляю.
Мой код:
$pmws = New-Object PrincipalManagement;
$pmws.Credentials = $cred;
$pmws.url = "http://172.31.9.2/bss/PrincipalManagement.asmx";
$accounts = $pmws.UpdateDeviceValues('18B81F1FD790','DisableICC','True');
$accounts
Любая помощь с этой ошибкой будет принята с благодарностью. Я довольно новичок в этом, заставляя Powershell работать с API.
Это пример SOAP 1.1 для API.
POST /bss/PrincipalManagement.asmx HTTP/1.1
Host: 172.31.9.2
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.microsoft.com/iptv/bss/UpdateDeviceValues"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope">
<soap:Body>
<UpdateDeviceValues xmlns="http://www.microsoft.com/iptv/bss">
<deviceExternalID>string</deviceExternalID>
<deviceValues>
<DeviceValue Key="string" Value="string" />
<DeviceValue Key="string" Value="string" />
</deviceValues>
</UpdateDeviceValues>
</soap:Body>
</soap:Envelope>
Я могу запустить это в PowerShell:
> $pmws | Get-Member
Я получаю длинный список API, и в этом списке я пытаюсь использовать ...
TypeName: PrincipalManagement
Имя - MemberType - Определение
UpdateDeviceValues - Метод - System.Void UpdateDeviceValues (строка deviceExternalID, DeviceValue [] deviceValues)
Большое спасибо Chamele0n! Ответ найден!
Мне не хватало как правильно отформатировать параметры при вызове метода.
Это работает!
$Account = "18B81F1FD790"
$deviceValue = New-Object ($ns + ".DeviceValue")
$deviceValue.Key = "DisableICC"
$deviceValue.Value = "True"
$accounts = $pmws.UpdateDeviceValues($Account, $deviceValue)
Спасибо,
Джейсон ...