Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - замена баз в файле ibases.v8i c использованием excel

Ответить
Настройки темы
PowerShell - замена баз в файле ibases.v8i c использованием excel

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день.
Помогите пожалуйста как сделать замену всех путей баз в файлах ibases.v8i.
Есть сервер, где у кого-то прописаны в файле базы, и эти базы переехали, а поправить нужно у всех, у кого в файле ibases.v8 прописаны старые базы. на новые. При этом новые базы и название старых нужно взять из excel файла.

Я предполагаю действовать следует так
1. Последовательно прочитать все файлы "C:\users\*\appdata...\ibases.v8i"
2. Прочитать базы подлежащие замене из cvs файла, в котором есть поля: "СтарыйСервер","СтароеНазваниеБазы","НовыйСервер","НовоеНазваниеБазы"
2a - учесть ситуацию, когда неизвестно какой указан сервер. То есть может быть что угодно между:
Connect=Srvr="Тутнепонятночто";Ref="base1";
3. Скопировать файлы перед изменением с сохранением структуры у кого производилось изменение (например пользователь user1) - значит в папке backup создать папку с именем User1 и уже туда скопировать.
3. Произвести замену по маске пути на новую базу.
4. Сохранить изменение в исходный файл ibases.v8i

Моё решение промежуточное:
1. Создан файл excel, с последующим сохранением в cvs с указанными значениями выше.
Скрытый текст
Мой код:
[PSHELL]

$replacers = Import-Csv "C:\ps\test1.csv" -Encoding Default -Delimiter ";"
gc C:\ps\ibases.v8i | ForEach-Object {
$output = $_
foreach ($r in $replacers) {

$outSrvr='Connect=Srvr="'+$r.Srvr+'";'
$outRef='Ref="'+$r.Ref+'";'
$outReplace=$outSrvr+$outRef
$output = $output -replace ("^Connect=Srvr=.+[$r.Ref$]??"),($outReplace)

}
return $output | Out-File C:\ps\ibases11.v8i -Append -Encoding utf8
}

[/PSHELL]


Содержимое файла ibases.v8i Для примера:
Скрытый текст

[База1]
Connect=Srvr="server1";Ref="Base1";
ID=7853661-7598-49778-3gg6-1414451
OrderInList=7859
Folder=/
OrderInTree=458
External=0
App=Auto
WA=1
[База2]
Connect=Srvr="server2";Ref="Base2";
ID=7853661-7598-49778-3gg6-1414551
OrderInList=45889
Folder=/
OrderInTree=78
External=0
ClientConnectionSpeed=Normal
App=Auto
WA=1
Version=8.3
DefaultVersion=8.3.12.1616
[abk _ 2017]
Connect=Srvr="Server3";Ref="Base3";
ID=7853661-7598-49778-3gg6-14148551
OrderInList=4586
Folder=/
OrderInTree=1458
External=0
ClientConnectionSpeed=Normal
App=Auto
WA=1
Version=8.3




Я запутался как сделать регулярное выражение для замены и если выполнять выше код, замена происходит, но например в файле cvs будет последняя база base3, то ВСЕ базы будут замены почему то на base3 и server3

Отправлено: 09:19, 12-09-2019

 

Старожил


Сообщения: 427
Благодарности: 72

Профиль | Отправить PM | Цитировать


Цитата morgan-12l1:
и если выполнять выше код, замена происходит, но например в файле cvs будет последняя база base3, то ВСЕ базы будут замены почему то на base3 и server3 »
покажите ваш csv

Отправлено: 13:39, 12-09-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Ageron:
покажите ваш csv »
Скрытый текст

OldName;NewServer;NewName
Base1;TestServer1;Base1
Base2;TestServer2;Base2
Base3;TestServer3;Base3
Base4;TestServer4;Base4

Отправлено: 14:46, 12-09-2019 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Цитата morgan-12l1:
поля: "СтарыйСервер","СтароеНазваниеБазы","НовыйСервер","НовоеНазваниеБазы" »
Цитата morgan-12l1:
OldName;NewServer;NewName
Base1;TestServer1;Base1 »

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 15:01, 12-09-2019 | #4


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
поля: "СтарыйСервер","СтароеНазваниеБазы","НовыйСервер","НовоеНазваниеБазы" » »
Это для примера. т.к. на английском лучше. Можно сделаь и так:

СтароеНазваниеБазы;НовыйСервер;НовоеНазваниеБазы
Base1;TestServer1;Base1

Отправлено: 15:05, 12-09-2019 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Я просто указал на то, что в первом случае у вас 4 колонки, а в CSV - 3.

А что, много вариантов этого файла с базами?
Может быть, просто руками нарисовать несколько вариантов файла и распространить его нужным людям, положим, политикой? Заодно будет ясно, кто чем пользуется, и в дальнейшем будет проще добавлять что-либо.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 21:55, 12-09-2019 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - замена баз в файле ibases.v8i c использованием excel

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Поиск и замена текста в файле Дмитрий_Кульгейко@vk Скриптовые языки администрирования Windows 20 12-07-2016 20:01
Любой язык - поиск и замена текста с использованием трех файлов тхт Alexander_88 Скриптовые языки администрирования Windows 0 11-10-2015 17:28
CMD/BAT - Замена слова в файле Xsander1cage Скриптовые языки администрирования Windows 2 05-11-2014 21:09
CMD/BAT - Поиск и замена в reg файле. Podagral Скриптовые языки администрирования Windows 0 05-12-2011 12:08
CMD/BAT - [решено] замена в файле bonus1 Скриптовые языки администрирования Windows 2 08-11-2011 11:23




 
Переход