Вы не можете использовать forEach
в такой ситуации.
Вместо этого, поскольку вы используете параллелизм на основе обещаний, вам придется превратить каждый запрос в обещание (arr.map(num => ...)
), а затем обернуть все из них в Promise.all, который сам возвращает обещание, которое разрешается после все завернутые обещания решаются.
let arr = [1, 2, 3, 4, 5, 6];
Promise.all(
arr.map(num =>
request("http://google.com")
.get("/")
.then(() => {
console.log(num);
})
)
).then(() => {
console.log("HERE");
});
Ключ здесь должен запуститься путем записи API, к которому можно получить доступ от .NET, затем можно легко перенести вызовы к этому API в DLL, который выставляет классы, которые являются PowerShell cmdlets. Если Вы хотите, чтобы кто-то смог администрировать Ваш сервис удаленно затем, я думаю, вероятно, что лучшая вещь состоит в том, чтобы создать или веб-сервис или Сервис WCF, который делает это, и затем можно перенести это в PowerShell. Если Вы взглянете на codeplex, то Вы найдете, что некоторые примеры администрируют удаленные веб-услуги как GoGrid и Услуги передачи данных SQL, которые дадут Вам некоторый пример кода для запущения Вас.
Другой способ выставить внутреннее состояние службы Windows пришел на ум. Вы могли выставить информацию через WMI, который может быть использован от PowerShell или Ваших команд PowerShell.
Я не уверен, можете ли Вы сказать Вашему сервису выполнять действия через WMI, но Вы, по крайней мере, смогли бы вытащить состояние.
Решение состояло бы в том, чтобы Ваша служба Windows выставила интерфейс администрирования через WCF. Ваши команды PowerShell использовали бы этот сервис WCF, чтобы вытащить информацию и заставить службу Windows выполнить действия.
Третья альтернатива могла бы быть должна заставить службу Windows быть контент-провайдером PowerShell. Однако я никогда не делал тот сам, таким образом, я не уверен, подходят ли они для хостинга в службе Windows, так как услуга не могла бы работать все время.