Быстрое создание hostlist.txt
Я неоднократно писал про то что использую в работе файл servers.txt или hostlist.txt, но ни разу не показывал как именно я собираю данные.
Вариантов масса – можно экспортировать данные из оснастки ADUC, можно рисовать руками, но лучше скриптом.
Для работы скрипта должен быть установлен модуль Active Directory Module for PowerShell (из пакета RSAT). Естественно запускаться это все должно на Windows 7.
# импортируем модуль ActiveDirectory
Import-Module ActiveDirectory
# Указываем путь для поиска
$base = ‘OU=Servers,DC=domain,DC=local’
# на всякий случай берем только свежие записи
$d = [DateTime]::Today.AddDays(-30)
# выполняем поиск
$computers = Get-ADComputer -Filter ‘PasswordLastSet -ge $d’ -Searchbase $base
# выводим результаты в файл hostlist.txt
foreach($computer in $computers) {
$computer.Name | Out-file hostlist.txt -append
}
Import-Module ActiveDirectory
# Указываем путь для поиска
$base = ‘OU=Servers,DC=domain,DC=local’
# на всякий случай берем только свежие записи
$d = [DateTime]::Today.AddDays(-30)
# выполняем поиск
$computers = Get-ADComputer -Filter ‘PasswordLastSet -ge $d’ -Searchbase $base
# выводим результаты в файл hostlist.txt
foreach($computer in $computers) {
$computer.Name | Out-file hostlist.txt -append
}
PS уверен что приведенный ниже скрипт можно упростить
Выкладывайте свои варианты в комментариях.
Похожие статьи
Если Вам понравилась статья, то вы можете подписаться на RSS. А также бесплатно подписаться по E-mail и получать актуальную информацию в числе первых.
Вы можете оставить комментарий.
-Properties dNSHostName – Можно не указывать,т.к по умолчанию в выводе и в дальнейшем не используется в вашем скрипте.
foreach($computer in $computers) {
$computer.Name | Out-file hostlist.txt -append
} – Нехорошая практика,особенно если посмотреть с ProcMon,что происходит.
Используя ваш метод,Out-File в теле цикла,получим:
PS > $sresult | ? {$_.path -eq «F:\test.txt»} | group operation -NoElement
Count Name
—– —-
127 QueryOpen
126 CreateFile
126 QueryStandardInformati…
126 WriteFile
126 CloseFile
Вынесем Out-File из цикла.
$computers | %{$_.Name} | out-file F:\test.txt -Append
PS > $fresult | ? {$_.path -eq «F:\test.txt»} | group operation -NoElement
Count Name
—– —-
2 QueryOpen
1 CreateFile
1 QueryStandardInformati…
126 WriteFile
1 CloseFile
KazunЦитировать
Согласен.
Только результирующий файл мы создаем единожды и поэтому можно закрыть глаза на файловые операции.
Каков Ваш правильный вариант?
Сергей МариничевЦитировать
а почему вы csv не используете? гораздо универсальные скрипты получаются
Konstantin K.Цитировать
Использовать csv для одного значения?
Думаю это излишне.
Чем проще тем лучще.
Сергей МариничевЦитировать
Оба варианта рабочих,а кому,что нравится,тот пусть и выбирает вариант.
KazunЦитировать
По поводу csv тоже не соглашусь,пока не покажите примеров и ситуаций.
А так если сильно любите CSV,то для одного значения =))
Import-Csv serverlists.txt -Header ComputerName
KazunЦитировать
Допустимо как один из вариантов для Get-Content serverlists.txt
Но все же CSV удобен для импорта данных более чем по одному столбцу.
Сергей МариничевЦитировать
я про то, что если использовать csv?, то это более универсально. можно нужные данные брать из любого csv и не задумываться о столбцах. каждый сам выбирает как ему удобно. я все стараюсь на csv если речь идет про powershell
Konstantin K.Цитировать