Вы можете сделать это, но для того, чтобы веб-сервер отправлял любую информацию в браузер, браузер должен инициировать запрос, чаще всего это происходит с JavaScript.
Сначала настройте прослушиватель HTTP для сервера.
#Setting up the listener
$Server = [System.Net.HttpListener]::new()
$Server.Prefixes.Add('http://localhost:8001/')
$Server.Start()
Запускает веб-сервер, прослушивающий запросы в указанной точке входа. Далее мы определим короткую вспомогательную функцию, которую этот сценарий будет использовать для инкапсуляции отправки ответов обратно в браузер.
Function Send-WebServerResponse($InputObject){
$JSON = $InputObject | ConvertTo-Json
$buffer = [System.Text.Encoding]::UTF8.GetBytes($JSON)
$Context.Response.ContentLength64 = $buffer.Length
$Context.Response.OutputStream.Write($buffer, 0, $buffer.length)
$Context.Response.OutputStream.Close()
}
Следующий шаг - написать то, что было бы логином контроллера c, если бы это было MVC приложение. В основном это слой маршрутизации, поэтому скрипт знает, как реагировать в зависимости от типа запроса.
#Listening for a particular header value
$Context = $Server.GetContext()
Write-Host "$($Context.Request.UserHostAddress) [$($Context.Request.HttpMethod)]=> $($Context.Request.Url)" -ForegroundColor Green
$RequestData = $Context.Request.Headers.GetValues('RequestData')
if ($Context.Request.Url.AbsolutePath -eq '/TestMe'){
Write-Host "Received request for /TestMe endpoint..." -ForegroundColor Green
$Body = [System.IO.StreamReader]::new($Context.Request.InputStream, $Context.Request.ContentEncoding)
$Data = $Body.ReadToEnd() | convertfrom-stringdata
$Body.Close()
Send-WebServerResponse "Request Received successfully to /TestMe"
}
Наконец, вот как выглядит JS для запроса информации у этого слушателя:
$.ajax({
//the url to send the data to
url: "TestMe",
//the data to send to
data: {SomeParam : "SomeValue"},
//type. for eg: GET, POST
type: "POST",
//datatype expected to get in reply form server
dataType: "json",
//on success
success: function(data){
if (data){
Console.Log("Request Success");
}
else{
Console.Log("Request Failed!");
}
},
//on error
error: function(){
//bad request
}
});
Написал этот ответ с помощью @ScottCorio, который научил меня этому методу.