Итак, решение, приемлемое для этой конкретной задачи, было найдено!
Огромнейшее спасибо всем, кот подсказывал направление поиска решения! Отдельная благодарность
сергей кузьмин (если бы я увидел его ответ раньше...)
А решение, как оказалось, достаточно простое:
powershell -nologo -noprofile "%{[Net.ServicePointManager]::SecurityProtocol = 'Tls12, Tls11, Tls, Ssl3'} ;(Invoke-WebRequest -UseBasicParsing -Uri <ULR>).StatusCode;exit [int]$Error[0].Exception.Status"
Результат считывается из значение свойства "
Status
" члена "
Exception
" в переменной
$Error
. Это помогает обработать ситуации типа такой
Invoke-WebRequest : Невозможно разрешить удаленное имя: 'cle.linux.org.tw'
строка:1 знак:77
+ %{[Net.ServicePointManager]::SecurityProtocol = 'Tls12, Tls11, Tls, Ssl3'} ;Invo ...
+ ~
~~~
+ CategoryInfo: InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
Когда до ответа сервера ("
Response
") дело даже не доходило, и получали "0" код возврата, хотя ошибка была. Значить искать причину надо было где‐то раньше.
Посмотрев через
$Error[0].Exception | Get-Member
видим, что в "
Exception
" есть такое свойство как
Status Property System.Net.WebExceptionStatus Status {get;}
, которое и даёт
ответ, было соединение или нет.
Ну, вот, как‐то так. Почти полный аналог "curl".
Если надо получить строковое описания статуса соединения, то необходимо убрать
[int]
перед
$Error[0].Exception.Status
. Ещё обратите внимание, что считывается последний код
Exception
текущей сессии.