![]() |
Редактирование ini файлов.
Здравствуйте! Возникла проблемка с редактированием 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" не распознано как имя командлета Помогите пожалуйста понять почему? |
SahatoshL, Потому что такой команды или функции в PowerShell нет. Это либо какой-то подгружаемый сторонний модуль, либо самописная функция или скрипт.
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
PowerShell/Replace-FileString.ps1 at master · kevinkemp/PowerShell · GitHub Replace()| SS64.com и т.д. Благо, что там таки стараются не забывать указывать авторство/источник происхождения кода. |
Цитата:
|
Попробуйте так:
Код:
Get-Content Clients.txt | ForEach-Object { |
Цитата:
|
Здравствуйте! я опять по тому же вопросу) точнее продолжил эту тему ) создал формочку с кнопочками и т.д. но и решил усложнить немного то что мне показали. сделал следующим образом:
$NewIP="Server=22.22.22.22" # вытаскиваем список компов $adress=Get-Content C:\powrsh\comps.txt #запускаем цикл по списку станций for ($i=0; $i -le $adress.Length; $i++) # меняем на 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" #сразу же проверяем заменился ли адресс $ipCheck=Get-Content "\\$adress[i]\C$\AutoGRAph\Setup.ini" #Запускаем цикл по файлу setup.ini for ($j=0; $j -le $ipCheck.Length; $j++) {if ($ipCheck[$j] -eq $NewIP) {"на компьютере с именем"+$adress[$i]+" адрес сервера изменен на"+$NewIP }else {"на компьютере с именем"+$adress[$i]+" адрес сервера не изменен" } } } Но что то он изначально начал ругаться на строчку \\$adress[i]\C$\AutoGRAph\Setup.ini. Не берет он имя компа с тхт а просто так и ищет например PCname[0]. не пойму почему) подскажите пожалуйста) ну и в основном пробегите глазами а то я первый раз начал с циклами в Powershell работать) |
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. |
SahatoshL, Пишите пожалуйста код в теге code. В редакторе есть ссылка на теги.
Не стоит бездумно смешивать мои два пункта, в цикле foreach: Код:
$NewIP="Server=22.22.22.22" |
Цитата:
Цитата:
А второй цикл можно также впринципе организовать через Foreach пот такому же принципу как и первый? или же его можно оставить? |
Если не ошибся:
Код:
$NewIP="Server=22.22.22.22" |
Цитата:
|
SahatoshL, Я бы вообще так не проверял, попробуйте такие варианты
Код:
$ipCheck=Get-Content "\\$i\C$\AutoGRAph\Setup.ini" |
Цитата:
|
SahatoshL, Проверяют массив либо на соответствие элемента рег.выражению, либо на наличие данного элемента массива.
|
Цитата:
|
Время: 00:23. |
Время: 00:23.
© OSzone.net 2001-