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

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

Ответить
Настройки темы
PowerShell - [решено] Переменные из данных в txt файле

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


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


Конфигурация

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


Изменения
Автор: breakfruit
Дата: 02-06-2015
Всем доброго времени суток. Для меня, по-прежнему, PoSH - дремучий лес. И вновь появилась (поставили ) интересную задачу.

Есть txt файл с некими параметрами
Код: Выделить весь код
Id                : 39d525ee-de75-446c-84bd-0d0ff08d3b8d
TypeOfRule        : IP
VMId              : e0f63469-1c5e-4c8e-a0ae-5b92e7cfe1da
Name              : ICMP Allow in
Description       : 
Direction         : Inbound
Action            : Allow
LocalPorts        : {0-65535}
RemotePorts       : {0-65535}
RemoteVMs         : {}
TargetAddressType : Any
VlanId            : 4095
Protocol          : ICMP
ProtocolNum       : 1
ProtocolString    : ICMP
RemotePortsString : 0-65535
LocalPortsString  : 0-65535
RemoteIPs         : Any
RemoteMACString   : Any
Нужно задать переменные, используя почти все указанные значения полей в файле. Т.е. то, что после ":" идет. Я так понимаю, тут потребуется уже что-то более серьезное, чем foreach, который я уже худо бедно освоил. Но вот что именно, загуглился уже весь.

Заранее признателен за любую помощь. А если еще и наводка будет на то, что почитать. Конкретно по данной тематике - с меня напитки и плюшки по почте России :D

Отправлено: 16:43, 01-06-2015

 

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


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

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


Kazun, в общем скрипт отрабатывает без ошибок НО

Код: Выделить весь код
$script:vmgroup=Get-VMgroups | where {$_.name -like "ad*"} | select -ExpandProperty ID

        Get-Rules -VMId $groupID | Export-Clixml -path c:\rules10.xml

$script:vmgroup2=Get-VMGroups | where {$_.name -like "web*"} | select -ExpandProperty ID
        Add-IPRule | Import-Clixml -path C:\rules10.xml
На этапе добавления правил - запрашвиает параметры для ввода. Практически все поля, указанные в экспортированном файле - обязательны для ввода, но командой командлетом фаервола - Import не воспринимается... Т.е. после выполнения Add-IPRule начинается запрос ввода данных.

Полагаю, что еще и парсинг XML придется почитать...

-------
И на груди его могучей три волосины сбились в кучу.


Последний раз редактировалось breakfruit, 02-06-2015 в 12:12.


Отправлено: 10:23, 02-06-2015 | #11



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

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


Ветеран


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

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


Get-Help Add-IPRule -Full - смотрим какие параметры требуется передать командлету.
Код: Выделить весь код
Import-Clixml -path C:\rules10.xml | Foreach {Add-IPRule -Name $_.Name -Action $_.Action}
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:18, 02-06-2015 | #12


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


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

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


Kazun, наводка отличная. Ман прочитал, но... Команда данная ровным четом не выполняет нужной функции, так как ADD-IPrule продалжает запрашивать необходимые параметры, но такой код
Код: Выделить весь код
$script:vmgroup=Get-VMgroups | where {$_.name -like "ad.*"} | select -ExpandProperty ID

        Get-Rules -VMId $vmgroup | Export-Clixml -path c:\rules10.xml

$script:vmgroup2=Get-VMGroups | where {$_.name -like "web*"} | select -ExpandProperty ID

$script:inputdata=Import-Clixml -path C:\rules10.xml 



foreach ($VMid in $InputData)
         
         
         {
         Add-IPRule -VMId $vmid.vmid -Name $vmid.name -Action $vmid.action -Description $vmid.description -Protocol $vmid.protocol
         }
Делает то, что нужно, с оговоркой: правила дублируются в ту же группу, а не в другую. Я ужде в конец запутался. Вроде все корректно в коде. И поле нужное (VMId в данном случае указывает на ID группы) выцепил (проверил четырежды).

-------
И на груди его могучей три волосины сбились в кучу.


Отправлено: 13:17, 02-06-2015 | #13


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


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

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


Нашел свою ошибку. Дальше пошли танцы со сторонним командлетом. Помечаю тему, как решенную. Всем спасибо за участие!

-------
И на груди его могучей три волосины сбились в кучу.


Отправлено: 15:43, 02-06-2015 | #14


Забанен


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

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


Цитата breakfruit:
...продалжает запрашивать необходимые параметры...
Если командлету передается довольно много параметров, то избежать головной боли - а главное спагетти-кода - можно, да и нужно, использовать тип Hashtable, например
Код: Выделить весь код
PS> $par = @{
>> Path = 'E:\*'
>> Force = $true
>> }
>>
PS> gci @par
Особенно удобно использовать данный подход, как было сказано, при передаче большого количества параметров и дальнейшей отладке, не говоря уже о простоте "изъятия" одного из них.

Отправлено: 17:57, 02-06-2015 | #15


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


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

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


greg zakharov, сейчас очень интересно, но я мало чего понял...

Т.е. я понимаю, о каких спагетти речь (они фактически и получились) - но все остальное....

-------
И на груди его могучей три волосины сбились в кучу.


Последний раз редактировалось breakfruit, 03-06-2015 в 17:20.


Отправлено: 17:05, 03-06-2015 | #16


Забанен


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

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


breakfruit, прошу прощения, если сформулировал мысль не достаточно четко. Попробую объяснить популярно на пальцах. Допустим есть командлет, которому нужно скормить более одного параметра за раз. Например:
Код: Выделить весь код
Invoke-Cmdlet -Param1 one -Param2 two ... -ParamN N
Иными словами, чем больше параметров, тем длиннее спагетти, а следовательно сложнее в отладке код. Чтобы сделать код более удобочитаемым параметры командлету можно передать в виде хэш-литерала, т.е. код выше можно переписать как:
Код: Выделить весь код
$par = @{
  Param1 = 'one'
  Param2 = 'two'
  ...
  ParamN = N
}

Invoke-Cmdlet @par
Если по каким-то причинам какой-то из параметров оказался не нужел, достаточно его либо удалить из хэша, либо закомментировать.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:18, 03-06-2015 | #17


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


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

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


greg zakharov, во. Я попоутно читаю, конечно же, литературу и блоги на тему PoSH. Т.е. мы создаем переменную и задаем значением оной - массив параметров? Или я путаюсь в определениях? Суть кода я понял, но (так как я ОЧЕНЬ далек от кодинга в принципе, и по образованию воообще никому не нужный гуманитарий :D ) в определениях, видимо, путаюсь.

-------
И на груди его могучей три волосины сбились в кучу.


Отправлено: 08:35, 04-06-2015 | #18


Ветеран


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

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


breakfruit, верно. Только не «массив», а «хэш-таблица» (набор пар «имя-значение»).
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:40, 04-06-2015 | #19


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


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

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


Iska, и любой командлет (даже стороннего разработчика) будет его нормально воспринимать? Т.е. это приемущество непосредственно PoSH, которое не зависит от командлетов?

-------
И на груди его могучей три волосины сбились в кучу.


Отправлено: 08:48, 04-06-2015 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Выбор данных из txt файла leks71 Скриптовые языки администрирования Windows 2 13-04-2015 20:00
Любой язык - Выборка данных из txt KarpovStas Скриптовые языки администрирования Windows 22 27-11-2013 17:16
CMD/BAT - выполнение команд из списка в txt файле systemroot Скриптовые языки администрирования Windows 2 12-02-2011 17:49
CMD/BAT - [решено] Ввод данных в переменную из txt-файла river123 Скриптовые языки администрирования Windows 1 10-01-2011 18:43
CMD/BAT - [решено] Выбор данных из txt по маске hxygen Скриптовые языки администрирования Windows 4 24-10-2010 15:52




 
Переход