У вас есть две вещи: фильтрация и итерация по коллекции.
- Фильтрация : принцип: всегда используйте фильтрацию слева, насколько это возможно.Эти две команды делают то же самое, но вторая не будет передавать огромный кусок данных через канал (или сеть):
Get-Process |where-Object {$ _. Name-like 'chrome'} ||Export-Csv 'c: \ temp \ projects.csv'
Get-Process -Name chrome |Export-Csv c: \ temp \ projects.csv
Это замечательно при работе с огромными списками компьютеров или большими файлами.
Многие командлеты имеют свои собственные функции фильтрации.Запустите команду get Get-Help get-process -full
, чтобы увидеть, что они предлагают, прежде чем отправлять трубку.
итерация по коллекциям :
Здесь у вас есть 3 возможности:
- командных команд - встроенная возможность командлетапередачи коллекции в другой командлет:
Get-Service -name BITS, Spooler, W32Time |Set-Service -startuptype Автоматически
- Методы WMI - WMI использует свой собственный способ создания первого (другой синтаксис)
gwmi win32_networkadapterconfiguration -filter "описание типа '% intel%'" |EnableDHCP ()
- перечисление объектов - итерация по списку:
Get-WmiObject Win32_Service -filter "name =«БИТЫ» »|ForEach-Object -process {$ _. Change ($ null, $ null, $ null, $ null, $ null, $ null, $ null, "P @ ssw0rd")}
Кредиты : Я нашел объяснения, которые прояснили беспорядок в моей голове вокруг всех этих вещей в книге под названием: Изучите Powershell за месяц обедов (главы 9 и 13 в данном случае)