Powershell: invoking New-WebServiceProxy ruins following Invoke-WebRequest
The story so far: i'm writing a 'create-new-user' PoSh script, among all else i need it to:
- create WebServiceProxy object as variable (since Cisco UCM we use utilizes SOAP requests to interact with it)
- pull a PHP script on our Intranet website to sync it with Active Directory once the user is created, the easiest way is AFAIR Invoke-WebRequest commandlet.
So now it looks like this:
$ MyCreds = Get-Credential -Message "Укажите ваш пароль" -Username $($env: имя пользователя) $AXL = New-WebServiceProxy -Uri $("\\server\smbshare\AXLAPI.wsdl") -Credential $MyCreds .. Invoke-WebRequest -Uri "https://intranet.company.com/ad_sync.php" -Method Get
Я обнаружил, что вызов WebRequest перед созданием объекта WebServiceProxy успешен, однако вызов WebRequest в любое время после сбоя приводит к следующей ошибке:
Invoke-WebRequest: базовое соединение было закрыто: при отправке произошла непредвиденная ошибка.
У меня нет опыта работы с.NET, классами и подобными вещами, так что, возможно, я ошибаюсь в своих предположениях, но сейчас я пытаюсь (и не могу) выяснить, ожидается ли такое поведение? Базовая логика предполагает, что создание переменной не должно влиять на вызов простых запросов, но все же это влияет. Итак, я был бы благодарен за ссылку для чтения, которая объясняет, как это работает.
И еще один главный вопрос - есть ли решение или хотя бы обходной путь? Мои теоретические предложения напоминают удаление объекта WebServiceProxy (не знаю, как) или использование альтернативного способа извлечения сценария PHP.
Некоторая дополнительная информация:
- Версия Powershell: 4.0
- Часть WebServiceProxy предоставлена коллегой, так что я не слишком знаком с ней, просто нужно собрать все в один скрипт
- мы не можем изменить порядок команд из-за логики скрипта, это должно быть сделано именно в этом порядке
Любые советы по этому вопросу очень ценятся, спасибо!
1 ответ
Тем не мение New-WebServiceProxy
гадости с Invoke-WebRequest
это, вероятно, только в текущем процессе. Таким образом, обходной путь - запустить его из текущего процесса.
Так что меняй
Invoke-WebRequest -Uri "https://intranet.company.com/ad_sync.php" -Method Get
к
Start-Job -ScriptBlock { Invoke-WebRequest -Uri "https://intranet.company.com/ad_sync.php" -Method Get} | Receive-Job -Wait
Это запустит его в другом процессе и будет ждать результатов.