![]() |
Поженить cmd/bat и powershell
Оказалос, что моему cmd-скрипту надо читать csv, присваивать прочитанное переменным и работать далее с этим.
Но все поиски говорят о том, что нормально работать с CSV из батника не получится. Надо powershell + Собствоенно вопрос: Можно ли как- то именно в CMD/BAT скрипте пройти по каждой строке SCV файлика и Прочитать значения в переменные, чтобы дальше с ними пошуршать? То есть вызывать powershell -command Import-Csv... И результат рсскладывать в переменные... |
на такое рацпредложение даже мата жалко
|
msvrd, чтобы о чем‐ то рассуждать, надо иметь образец файла csv и понимать, почему с Вашими файлами csv не получится работать в cmd.?
Что конкретно надо присваивать переменным и что дальше с ними происходит.? Если в полях не содержатся какие‐либо особенные для cmd символы, нет проблем, а если содержатся ‐ то каким образом Вы хотите такие строки иметь в переменных? Приложите к сообщению файл. Как вариант, есть возможность совместить cmd и js. |
msvrd, наверное, можно, но зачем? Powershell не кусается.
|
Ну и я свои 5 копеек заброшу... :)
Цитата:
Вопрос только в целесообразности, которая определяется самой задачей в целом. Возможно и cmd (статичный, малофункциональный и умирающий инструмент) не понадобится вовсе... |
Со всемми согласен, поясню дополнительно.
Есть уже готовый скрипт на cmd\bat который много разного всего делает. Переписывать это на powershel руки не поднимаются. Одна из задач делать следущее: Есть CSV с данными о пользователях. Заголовками типа USER:PASSWORD:PROXY:MAIL (там больше разного записано, но не суть...) Пример строки: user1:password1:"https://login:password@host:port":mail1@google.com главная проблема в том, что разделитель «:» встречается не только в виде разделителя :( Записи в этом CSV постоянно меняются записи. Одни удаляются, другие добавляются. И вот всем этим «пользователям» надо переодически менять PROXY да так, чтобы они не повторялись. То есть Задача 1 — раздать всем разное. Довольно простая. Есть отдельный файлик со списком прокси типа proxy.txt, ищем какие строки из него уже содержатся в CSV. Остальные можор «раздавать» новым. А вот «заменить» текущие не понимаю как без powershell, который умеет корректно разбирать CSV. То есть надо «вырезать» текущие значения PROXY и вставить новые. То есть перём файлик proxy.txt и построчно каждую запись от туда вставляем в каждую строку CSV, заменяя то что там сейчас в PROXY. Идеи кроме как рзббирать CSV внешним posershell запросом, получать обратно в переменную нужное значение PROXY и потом собирать csv-строку заново и записывать у меня нет. Ровно как и понимания как бы этот финт провернуть без переписания всего кода на ps. Может у вас есть? :) |
В общем-то у меня сейчас не самое элегантное, но решение есть.
Просто через for /f "usebackq tokens=1-8 delims=^:" Потом собираю нужный из четырёх токенов. Работает, но если чего в структуре csv поменяетя (например не будет логин:пароль) — всё сломается :( |
Цитата:
Цитата:
Если вручную редактируются, то возможны привнесенные ошибки в структуру файла, а их исправить автоматически, наверное, практически нереально... Цитата:
1. Существующие записи удалять надо все или по каким-либо критериям? 2. Раздать всем разное - в принципе, реализуемо, но тут необходимо прояснить вопрос соответствия количества записей в списке пользователей и в файле со списком прокси... хватит ли записей на всех, чтобы выполнить условие "всем разное"? 3. Какой формат записей и кодировка этого файла proxy.txt? 4. Зависит от ответа на п.3 ... Соответствует ли login:password для прокси, записи конкретного пользователя USER:PASSWORD или это разные данные? Цитата:
Код:
powershell -ex bypass -f ".\script.ps1" |
msvrd, Если смысл камлания - вытащить то, что в кавычках
Код:
@Echo Off Файл csv для отладки
Код:
USER:PASSWORD:PROXY:MAIL Остальные хотелки требуют конкретных образцов файлов. Не надо навязывать свой способ решения. Лучше подробно формулируйте задачу: что имеем (примеры файлов) что хотим получить (пример файла). Очень желательно файлы приложить. |
Цитата:
Вот, примерное решение (если уточните задачу, ответив на поставленные выше вопросы, то код, возможно, придется изменить): script.ps1
Код:
$fincsv = '.\in.csv' in.csv
Код:
USER:PASSWORD:PROXY:MAIL proxy.txt
Код:
https://login1:password1@newhost1:newport1 |
Подскажите, как запустить файл 1.ps1 powershell, передав в в него параметр "c:\test".
1.ps1 Код:
Get-ChildItem -Path cert:\LocalMachine\Root |select -unique |Export-Certificate -FilePath $args[0]\RootCertBackup.sst -Type SST Код:
powershell -ex bypass -f "c:\22\1.ps1" "c:\test" |
Цитата:
Код:
Write-Output Код:
$args[0]\RootCertBackup.sst Поэтому, либо следует подумать, что делать (вырезать) со спец.символами в: Код:
$args[0] Код:
$path_to_dir=$args[0] -replace '\n' |
Код:
"$($args[0])\RootCertBackup.sst" |
DJ Mogarych, спасибо, всё получилось!
|
Какими командами дополнить файл 1.ps1, чтобы он выполнялся в системе, в которой по умолчанию отключено выполнение сценариев powershell или у пользователя нет прав администратора? Нужно временное повышенные прав на выполнение команды powershell.
|
Если у пользователя нет прав администратора, то повышать права он не может.
|
В самом простом случае запустить PS он сможет и сделать копию своих личных сертификатов. Сертификаты системы - вряд ли.
Что там в каждом конкретном случае - зависит от настроек, надо проверять. |
При установке сертификатов, когда выскакивает окно, нужно нажимать на "да". Как автоматизировать этот нюанс?
Код:
Import-Certificate -FilePath c:\cert\CU_RootCertBackup.sst -CertStoreLocation cert:\CurrentUser\Root |
Код:
-Confirm:$false |
DJ Mogarych, добавил в конец, не сработало. https://imgsh.net/a/G3fYzax.png
Код:
Import-Certificate -FilePath c:\cert\CU_RootCertBackup.sst -CertStoreLocation cert:\CurrentUser\Root -Confirm:$false |
Код:
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("C:\folder\mycertificate.cer") https://social.technet.microsoft.com...rverpowershell |
К сожалению и этот сценарий не сработал https://imgsh.net/a/VEYM8xe.png. Возможно причина проблемы в контейнере sst?
4.ps1 Код:
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("c:\cert\CU_RootCertBackup.sst") |
Код:
Get-ChildItem -Path C:\temp\CU_RootCertBackup.sst |Import-Certificate -CertStoreLocation cert:\LocalMachine\Root |
Время: 23:54. |
Время: 23:54.
© OSzone.net 2001-