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

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

Ответить
Настройки темы
PowerShell - Редактирование ini файлов.

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


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

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


Здравствуйте! Возникла проблемка с редактированием ini файлов с помощью Powershell.

Есть ini файлик в котором прописывается адрес сервера по которому клиентская часть общается с сервером.

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

С Powershell знаком совсем мало на уровне открыть закрыть процесс, посмотреть по сетке на каких компах он запущен.

Нашел в интернете вот такой вот примерчик

Get-Content Clients.txt | ForEach-Object {
Get-Item "\\$_\C$\Program Files\My Application\MyApp.ini" } |
Replace-FileString -Pattern 'Server=appserver1'
-Replacement 'Server=appserver2' -Overwrite

При попытке запуска Powershell выдает мне следующее: Replace-FileString" не распознано как имя командлета

Помогите пожалуйста понять почему?

Отправлено: 12:33, 11-04-2016

 

Ветеран


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

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


SahatoshL,
1. На мой взгляд цикл for здесь лишний, можно сразу пройтись по списку циклом foreach ($i in $adress) {}.
2. Надо чтобы раскрылась переменная:
Код: Выделить весь код
"\\$($adress[$i])\C$\AutoGRAph\Setup.ini"

Отправлено: 08:28, 14-04-2016 | #11



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

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


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


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

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


Цитата Foreigner:
SahatoshL,
1. На мой взгляд цикл for здесь лишний, можно сразу пройтись по списку циклом foreach ($i in $adress) {}.
2. Надо чтобы раскрылась переменная:
Код:
"\\$($adress[$i])\C$\AutoGRAph\Setup.ini" »

Попробовал так как вы сказали :
$NewIP="Server=22.22.22.22"

# вытаскиваем список компов
$adress=Get-Content C:\powrsh\comps.txt


#запускаем цикл по списку станций
foreach($i in $adress)

# меняем на i-ой раб станции ip сервера
{(get-content "\\$adress[$i]\C$\AutoGRAph\Setup.ini") -replace 'Server=11.11.11.11','Server=22.22.22.22' |
set-content "\\$adress[$i]\C$\AutoGRAph\Setup.ini"

}

Все равно ошибка и ругается на путь. get-content : Объект для указанного пути \\khmau-w-13675-2[khmau-w-13675-2]\C$\AutoGRAph\Setup.i
ni не существует или отфильтрован с помощью параметра -Include или -Exclude.

Отправлено: 08:42, 14-04-2016 | #12


Ветеран


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

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


SahatoshL, Пишите пожалуйста код в теге code. В редакторе есть ссылка на теги.
Не стоит бездумно смешивать мои два пункта, в цикле foreach:
Код: Выделить весь код
$NewIP="Server=22.22.22.22"

# вытаскиваем список компов
$adress=Get-Content C:\powrsh\comps.txt


#запускаем цикл по списку станций
foreach($i in $adress)

# меняем на i-ой раб станции ip сервера
{
(get-content "\\$i\C$\AutoGRAph\Setup.ini") -replace 'Server=11.11.11.11','Server=22.22.22.22' |
 set-content "\\$i\C$\AutoGRAph\Setup.ini"
}
Если будет ошибка, то попробуйте экранировать знак $ в C$, т.е. "C`$" или "C$([char]36)"

Последний раз редактировалось Foreigner, 14-04-2016 в 09:01.

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:52, 14-04-2016 | #13


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


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

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


Цитата Foreigner:
SahatoshL, Пишите пожалуйста код в теге code. В редакторе есть ссылка на теги. »
Не знал, теперь впредь буду так писать.

Цитата Foreigner:
Не стоит бездумно смешивать мои два пункта, в цикле foreach: »
Я сейчас пока пытаюсь только понять синтаксис и как тут устроено все. Да само построение кода схожее с С и С++ но для меня пока некоторые моменты не привычны) Простите уж если осквернил Powershell) Смешиваю не специально)

А второй цикл можно также впринципе организовать через Foreach пот такому же принципу как и первый? или же его можно оставить?

Отправлено: 09:00, 14-04-2016 | #14


Ветеран


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

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


Если не ошибся:
Код: Выделить весь код
$NewIP="Server=22.22.22.22"
$adress=Get-Content C:\powrsh\comps.txt

foreach ($i in $adress)
{
 (get-content "\\$i\C$\AutoGRAph\Setup.ini") -replace 'Server=11.11.11.11',"Server=$NewIP" |
  set-content "\\$i\C$\AutoGRAph\Setup.ini"

  $ipCheck=Get-Content "\\$i\C$\AutoGRAph\Setup.ini"

  foreach ($j in $ipCheck)
  {
    if ($j -eq $NewIP)
    {
      "на компьютере с именем " + $i + " адрес сервера изменен на " + $NewIP
    }
    else
    {
     "на компьютере с именем " + $i + " адрес сервера не изменен"
    }
}}
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:10, 14-04-2016 | #15


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


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

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


Цитата Foreigner:
SahatoshL, Пишите пожалуйста код в теге code. В редакторе есть ссылка на теги.
Не стоит бездумно смешивать мои два пункта, в цикле foreach:
Код:
$NewIP="Server=22.22.22.22"
# вытаскиваем список компов
$adress=Get-Content C:\powrsh\comps.txt
#запускаем цикл по списку станций
foreach($i in $adress)
# меняем на i-ой раб станции ip сервера
{
(get-content "\\$i\C$\AutoGRAph\Setup.ini") -replace 'Server=11.11.11.11','Server=22.22.22.22' |
set-content "\\$i\C$\AutoGRAph\Setup.ini"
}
Если будет ошибка, то попробуйте экранировать знак $ в C$, т.е. "C`$" или "C$([char]36)" »
Работает но подскажите пожалуйста вот еще какую вещь. Во втором цикле он сравнивает все строки ini файла и на каждую строчку выдает не изменен доходя до той строчки где совпадает изменен и остальное опять не изменен. а как сделать выбор именно строчки Server=22.22.22.22. где указать то что нужно выбрать после Get-Content?

Отправлено: 09:10, 14-04-2016 | #16


Ветеран


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

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


SahatoshL, Я бы вообще так не проверял, попробуйте такие варианты
Код: Выделить весь код
$ipCheck=Get-Content "\\$i\C$\AutoGRAph\Setup.ini"

if ($ipCheck -match 'Server=2\.2\.2\.2') { $True }

# или

if ($ipCheck -contains 'Server=2.2.2.2') { $True }
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:21, 14-04-2016 | #17


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


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

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


Цитата Foreigner:
SahatoshL, Я бы вообще не так не проверял »
-match и -contains по сути одно и тоже выполняют? я так понял они построчно проверяют текст и если есть совпадения тогда true ?

Отправлено: 09:24, 14-04-2016 | #18


Ветеран


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

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


SahatoshL, Проверяют массив либо на соответствие элемента рег.выражению, либо на наличие данного элемента массива.

Отправлено: 09:28, 14-04-2016 | #19


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


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

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


Цитата Foreigner:
SahatoshL, Проверяют массив либо на соответствие элемента рег.выражению, либо на наличие данного элемента массива. »
Спасибо!

Отправлено: 09:31, 14-04-2016 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Инфо - Редактирование файлов/Списки файлов Windows .:[все вопросы]:. prokazzza Оформление Windows XP 2168 11-01-2021 10:27
Загрузка - Конкурс - Редактирование меню загрузки, или куда пропал boot.ini OSZone Microsoft Windows 7 16 28-12-2012 17:18
CMD/BAT - [решено] редактирование boot.ini Bint Скриптовые языки администрирования Windows 2 11-05-2010 12:04
Загрузка - [решено] Редактирование Boot.ini не помогло SkalderGM Microsoft Windows 2000/XP 9 16-07-2009 11:10
Загрузка - Редактирование boot.ini не помогло Gusac Microsoft Windows 2000/XP 4 04-09-2006 11:53




 
Переход