![]() |
Переменные из данных в txt файле
Всем доброго времени суток. Для меня, по-прежнему, PoSH - дремучий лес. И вновь появилась (поставили:) ) интересную задачу.
Есть txt файл с некими параметрами Код:
Id : 39d525ee-de75-446c-84bd-0d0ff08d3b8d Заранее признателен за любую помощь. А если еще и наводка будет на то, что почитать. Конкретно по данной тематике - с меня напитки и плюшки по почте России :D |
Код:
PS > $val = (Get-Content f.txt) -replace " : ","=" | ConvertFrom-StringData |
Kazun, примного благодарен! Это очень полезно, но я, в виду понедельника, не все вводные сказал. В текстовом файле таких таблиц может быть две и более. В этом случае, я так понимаю, результат будет другим...
Т.е. Поля те же - значения разные. |
breakfruit, так Вам что, собственно, нужно: рандомная выборка из оных таблиц или какое-то определенное свойство? И потом, фраза "я так понимаю" обычно подразумевает некое размытое представление некой концепции. Чтобы понять происходящее:
Код:
PS> $a = (gc foo) -replace':','=' | ConvertFrom-StringData |
Цитата:
|
Вложений: 1
greg zakharov, не совсем рандомная. Есть сторонний командлет, в котором отсутствует команда ЭКспорта / импорта. РЕчь о FireWallе.
Цитата:
По порядку. 1. Есть группа (не просто выборка клиентов, а именно группа, в которую включены клиенты) юнитов у которых есть определенные правила. Условно Г1 2. Необходимо эти правила скопировать для другой группы юнитов. Условно Г2 Моя идея в том, что бы: 1. Экспортировать правила в txt 2. Распарсить его 3. Значению каждого поля задать переменную 4. Применить правила используя, полагаю, foreach. Это пока все, до чего я додумался. Правила в FireWall создаются на основе VmID (второе поле в выгруженном файле). Iska, пример в аттаче. Файл 125738 |
Используйте Export-CliXml и на требуемой машине Import-Clixml, так избежите подобных проблем.
Если формат неизменен txt: Код:
$d = (Get-Content ParentGroupRules.txt) -match " : " |
Kazun, не совсем понял "Если формат неизменен txt"? В смысле, что дальше код идет при условии выгрузки в txt файл? Если использовать CliXml - скрипт будет отличаться, правильно я понимаю?
|
FireWallе | Export-CliXml -Path rules.xml
Переходим на другую машину и выполняем: $val = Import-CliXml -Path rules.xml |
Kazun, попробую. Отпишусь по результатам.
|
Kazun, в общем скрипт отрабатывает без ошибок НО
Код:
Полагаю, что еще и парсинг XML придется почитать... |
Get-Help Add-IPRule -Full - смотрим какие параметры требуется передать командлету.
Код:
Import-Clixml -path C:\rules10.xml | Foreach {Add-IPRule -Name $_.Name -Action $_.Action} |
Kazun, наводка отличная. Ман прочитал, но... Команда данная ровным четом не выполняет нужной функции, так как ADD-IPrule продалжает запрашивать необходимые параметры, но такой код
Код:
$script:vmgroup=Get-VMgroups | where {$_.name -like "ad.*"} | select -ExpandProperty ID |
Нашел свою ошибку. Дальше пошли танцы со сторонним командлетом. Помечаю тему, как решенную. Всем спасибо за участие!
|
Цитата:
Код:
PS> $par = @{ |
greg zakharov, сейчас очень интересно, но я мало чего понял...
Т.е. я понимаю, о каких спагетти речь (они фактически и получились) - но все остальное.... |
breakfruit, прошу прощения, если сформулировал мысль не достаточно четко. Попробую объяснить популярно на пальцах. Допустим есть командлет, которому нужно скормить более одного параметра за раз. Например:
Код:
Invoke-Cmdlet -Param1 one -Param2 two ... -ParamN N Код:
$par = @{ |
greg zakharov, во. Я попоутно читаю, конечно же, литературу и блоги на тему PoSH. Т.е. мы создаем переменную и задаем значением оной - массив параметров? Или я путаюсь в определениях? Суть кода я понял, но (так как я ОЧЕНЬ далек от кодинга в принципе, и по образованию воообще никому не нужный гуманитарий :D ) в определениях, видимо, путаюсь.
|
breakfruit, верно. Только не «массив», а «хэш-таблица» (набор пар «имя-значение»).
|
Iska, и любой командлет (даже стороннего разработчика) будет его нормально воспринимать? Т.е. это приемущество непосредственно PoSH, которое не зависит от командлетов?
|
breakfruit, Должен любой, в том числе скрипты, если в них правильно оформлены параметры -- param ()
|
*ушел гуглить правильность оформления параметров*
Всем еще раз огромное спасибо. |
Всем привет еще раз. С вами - заметки начинающего PoSH'ера.
Как вы помните, проблема была в том, что бы убрать вот такие спагетти Код:
foreach ($hGroup in $InputData) Код:
$ruleset= @{ Код:
Add-IPRule : Cannot bind parameter 'Action'. Cannot convert value "Allow KERBEROS.action" to type "(убрал, дабы не было рекламы.VirtualFirewall.CommonDataTypes.RuleAction". Error: "Unable to match the После выполнения кода, даже с ошибками, картина переменных следующая PS> $group.name Allow KERBEROS PS> $group.action Value ----- Allow |
Не туда вынесли и не надо двойных кавычек:
Код:
foreach ($Group in $InputData) |
Т.е. хэш-таблица должна быть прописана внутри функции, всегда? Нельзя ее определить изначально?
|
breakfruit, Имхо не обязательно:
Код:
$par = @{ Path = 'D:'; Force = $true } |
Время: 15:03. |
Время: 15:03.
© OSzone.net 2001-