Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15

Как запустить консоль powershell и затем сохранить выходную строку в массив?

16.12.2021, 07:14. Показов 4338. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В винде делается руками так:
1. win+R - "powershell" (вызывается консоль powershell)
2. "$wc = new-object System.Net.WebClient" (1 строку пишем)
3. "$wc.DownloadString("http://myexternalip.com/raw")" (2 строку пишем)
Результат - внешний ip-адрес интернета: 94.125.243.53.

Мне нужно сохранить только ip-адрес как строку и дальше с ним работать. Консоль мне по сути совсем не нужна и даже лучше, если бы окно консоли не открывалось совсем. Нужен только IP.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2021, 07:14
Ответы с готовыми решениями:

Как запустить командную строку так, чтобы она затем запустила другую команду?
Например, я хочу по щелчку на пункте контекстного меню запускать командную строку, из которой потом запустится сразу другая команда, нечто...

Как сохранить массив с типом "структура" в файл, а затем читать из него?
Добрый день, дорогие форумчане. Помогите разобраться. Есть вот это: ' Здесть я объявляю пользовательскую структуру Public Structure...

Запустить PowerShell-скрипт как службу
Есть скрипт, он находит некоторый процесс (он в кол. 4 штук) и разбрасывает каждый процесс на каждое ядро. Итого каждый процесс выполняется...

44
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
16.12.2021, 16:35  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ft4l Посмотреть сообщение
у меня на MSYS2-minw32 ещё такое работает
там нет внешнего ip
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
16.12.2021, 16:36
Цитата Сообщение от ft4l Посмотреть сообщение
меня на MSYS2-minw32 ещё такое работает
Это локальный IP самого компа.
0
Невнимательный
 Аватар для ft4l
3142 / 1356 / 362
Регистрация: 08.02.2013
Сообщений: 7,920
Записей в блоге: 2
16.12.2021, 16:47
Цитата Сообщение от мама Стифлера Посмотреть сообщение
undefined reference to `WinHttpOpen'
вроде winhttp.lib пишут прилинковать
на cl.exe + link.exe не проверял компилятор у меня всё-равно древний ) DDK/WDK
но такая либа с такими функциями есть в PSDK, тоже древнем ))
c:\C\32xPSDK_2003r2\Lib\AMD64\winhttp.li b
c:\C\32xPSDK_2003r2\Lib\IA64\winhttp.lib
c:\C\32xPSDK_2003r2\Lib\winhttp.lib
Добавлено через 1 минуту
Цитата Сообщение от мама Стифлера Посмотреть сообщение
нет внешнего ip
я знаю это пример получения вывода консольной комманды
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
16.12.2021, 16:50
Лучший ответ Сообщение было отмечено мама Стифлера как решение

Решение

ft4l,

Переписал команду применительно к curl:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
 
int main( int argc, char *argv[] )
{
 
  FILE *fp;
  char path[1035];
 
  /* Open the command for reading. */
  fp = popen("curl -s http://myexternalip.com/raw", "r");// было ls -al /...
  if (fp == NULL) {
    printf("Failed to run command\n" );
    exit(1);
  }
  /* Read the output a line at a time - output it. */
  while (fgets(path, sizeof(path), fp) != NULL) {
    printf("%s", path);
  }
  /* close */
  pclose(fp);
  return 0;
}
Теперь будет выдавать внешний IPшник. Но должен быть доступен в переменной PATH или в каталоге с СИшным экзешником экзешник самого curl, т.е. curl.exe
Для винды 10, начиная с 1803 он уже идёт в комплекте и пути прописаны, для более древних скачать можно отсюда или собрать с гитхаба
1
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
16.12.2021, 17:29  [ТС]
drfaust, отлично, то что надо.
К сожалению так и не смог запустить остальные коды ((
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
16.12.2021, 19:47
Это ft4l перенаправлял выхлоп через каналы, его СИшный код - моё дело набрать curl --help и прочитать его
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
17.12.2021, 23:47  [ТС]
ft4l, ваш код с поста #4 скомпилировался и работает. Но мне нужно чтоб на выходе был однобайтный тип char, вместо LPSTR.
Можно как то преобразовать printf( "%s", pszOutBuffer ); в стандартный однобайтовый тип?
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
18.12.2021, 00:02
мама Стифлера, Пост №4 не мой, а ft4l и он исключительно под винду. Там я не очень силён.
Я говорил про 18й его пост: https://www.cyberforum.ru/post15936169.html
0
фрилансер
 Аватар для Алексей1153
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
18.12.2021, 00:13
мама Стифлера, LPSTR - это и есть char*
1
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
18.12.2021, 00:25  [ТС]
drfaust, знаю что не ваш, меня теперь интересует именно пост#4.
По началу показалось, что ваш пост#24 подходит под мою задачу. Но мне нужно его зациклить, чтоб с интервалом в 1 минуту проверял IP. И постоянный вызов curl.exe, думаю не самый лучший вариант.

Добавлено через 5 минут
Цитата Сообщение от Алексей1153 Посмотреть сообщение
LPSTR - это и есть char*
а точно ведь )))

Добавлено через 5 минут
Алексей1153, но у него цикл do while 2 раза крутится, и как я запомню эту переменную?
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
18.12.2021, 00:26
Цитата Сообщение от мама Стифлера Посмотреть сообщение
чтоб с интервалом в 1 минуту проверял IP. И постоянный вызов curl.exe, думаю не самый лучший вариант.
Естественно не лучший.
Но вы начали вообще с .Net и скрипта на PowerShell
Лучший - я Вам в личке указал. Быстро (не надо создавать каналы, не надо exec**() скрытый внутрях popen() и т.п.). Вариант в личке - практчески то же самое, что и вызов сторонней программ через popen(), только без накладных "ресуров" операционки.
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
18.12.2021, 00:30  [ТС]
2 раз мусор идет

Добавлено через 1 минуту
drfaust, ок, еще раз посмотрю.

Добавлено через 2 минуты
drfaust, в личке операторы для C++ есть, а я их не умею.
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
18.12.2021, 00:38
Цитата Сообщение от мама Стифлера Посмотреть сообщение
тоб с интервалом в 1 минуту проверял IP.
Я так понял - желаете сделать нечто, вроде сервера, но столкнулись с проблемой NAT/серыйIP и т.п.
Я не стал городить огород и выбрал hldns.ru для экспериментов, поделок, частного ftp и т.п. - по засвеченному мной адресу ничего тольком нет.

И да - у мну помимо этого паскаль-сайта есть ещё "честный" "серый" IP от ростелекома...

Добавлено через 4 минуты
Цитата Сообщение от мама Стифлера Посмотреть сообщение
в личке операторы для C++ есть, а я их не умею.
Код не мой, просто убираете <iostream> и меняете его на <stdio.h> - вся хрень с cin cout превращается в scanf/printf. остальное почти как в Си,
- если что, то проблему в тему - стараюсь следить...
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
18.12.2021, 00:40  [ТС]
drfaust, я пытаюсь вот это сделать Софт записывающий в журнал текущий IP от провайдера
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
18.12.2021, 01:02
ОСь какая?
Или кросс-пллатформенное?
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
18.12.2021, 01:07  [ТС]
для своей Win10 нужно
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
18.12.2021, 09:50  [ТС]
Цитата Сообщение от drfaust Посмотреть сообщение
если что, то проблему в тему - стараюсь следить...
Скомпилировал данный код как есть(для С++). Он даже в оригинальном виде не работает
Code
1
2
3
4
5
╬°шсър! Could not resolve proxy: proxy
 
--------------------------------
Process exited after 2.405 seconds with return value 0
Для продолжения нажмите любую клавишу . . .
И сам код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//подключаем необходимые заголовочные файлы
#include <string>
#include <iostream>
#include "curl/curl.h"
//подключаем стандартное пространство имен
using namespace std;
//объявляем буфер, для хранения возможной ошибки, размер определяется в самой библиотеке
static char errorBuffer[CURL_ERROR_SIZE];
//объялвяем буфер принимаемых данных
static string buffer;
//функция обратного вызова
static int writer(char *data, size_t size, size_t nmemb, string *buffer)
{
  //переменная - результат, по умолчанию нулевая
  int result = 0;
  //проверяем буфер
  if (buffer != NULL)
  {
    //добавляем к буферу строки из data, в количестве nmemb
    buffer->append(data, size * nmemb);
    //вычисляем объем принятых данных
    result = size * nmemb;
  }
  //вовзращаем результат
  return result;
}
 
//главная функция
int main(void)
{
    //необходимые CURL объекты
    CURL *curl;
    CURLcode result;
    //инициализируем curl
    curl = curl_easy_init();
    //проверяем результат инициализации
    if (curl)
    {
      //задаем все необходимые опции
      //определяем, куда выводить ошибки
      curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
      //задаем опцию - получить страницу по адресу [url]http://google.com[/url]
      curl_easy_setopt(curl, CURLOPT_URL, "google.com");
      //указываем прокси сервер
      curl_easy_setopt(curl, CURLOPT_PROXY, "proxy:8080");
      //задаем опцию отображение заголовка страницы
      curl_easy_setopt(curl, CURLOPT_HEADER, 1);
      //указываем функцию обратного вызова для записи получаемых данных
      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
      //указываем куда записывать принимаемые данные
      curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
      //запускаем выполнение задачи
      result = curl_easy_perform(curl);
      //проверяем успешность выполнения операции
      if (result == CURLE_OK)      
      //выводим полученные данные на стандартный вывод (консоль)
        cout << buffer << "\n";              
      else      
        //выводим сообщение об ошибке
        cout << "Ошибка! " << errorBuffer << endl;        
  }
  //завершаем сессию
  curl_easy_cleanup(curl);
  return 0;
}
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
18.12.2021, 11:12
Цитата Сообщение от мама Стифлера Посмотреть сообщение
curl_easy_setopt(curl, CURLOPT_PROXY, "proxy:8080");
Ну у тебя же нет никакого прокси (домашний комп) - закоментарь эту строчку и всё...

И да - заголовок страницы тебе тоже не нужен, ещё и эту строчку закоментарить надо: curl_easy_setopt(curl, CURLOPT_HEADER, 1);
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
18.12.2021, 11:33  [ТС]
drfaust, ну тогда вообще не понятно что выдало
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
 
 
--------------------------------
Process exited after 0.506 seconds with return value 0
Для продолжения нажмите любую клавишу . . .
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
18.12.2021, 12:44
Цитата Сообщение от мама Стифлера Посмотреть сообщение
curl_easy_setopt(curl, CURLOPT_URL, "google.com");
содержимое странички гугла
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.12.2021, 12:44

Как правильно на хостинше запустить файл PowerShell?
Залил на хостинг скрипт в .ps1 Пытаюсь запустить его - тупо вижу весь текст фаайла и ничего не происходит. Я явно что-то делаю не так..

Как запустить PowerShell-скрипт в скрытом режиме?
Привествую. Есть скрип на PowerShell. Называется ctr_switch. Как его запустить через VBS в скрытом режиме? На такой код выдает ошибку. ...

Как запустить консольное приложение с ключами в PowerShell ISE?
Пытаюсь запустить приложение wincontig (дефрагментатор). Вот такой код в скрипте: $disk = &quot;F:\&quot; $keys = &quot;/NOGUI...

При компиляции показывается консоль MSBuild затем еще одна консоль и без результата
Когда я компилирую проект C# в Visual studio 2013 открывает MSBuild (консольку) и нечего не пишет не работает после 5 секунд открывает еще...

Как запустить сценарий PowerShell от имени администратора через BAT файл
Имею вот такой .bat файл: @ECHO OFF chcp 65001 color 06 mode con:cols=100 lines=50 @cls powershell -file install_settings.ps1В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru