Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Классический пинбол, как в древнем игровом автомате или в компактной игрушке: есть пружины, шарики и препятствия. В нашем варианте можно не только зарабатывать очки: чтобы пройти уровень, придется выполнить дополнительную миссию.

Пинбол Пикабу

Аркады, На ловкость, Казуальные

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Powershell

С этим тегом используют

Windows Все
43 поста сначала свежее
16
rudm
rudm
11 месяцев назад
Лига Сисадминов
Серия Программизмы

Пишем в MySQL из Powershell скрипта⁠⁠

(Ссылка на github PowerShell-System-Hardware-Info)

Предыдущая часть: Powershell скрипт для сбора информации об аппаратной конфигурации компьютера

Наверное, это последняя версия скрипта по сбору инфы о железе ПК, хотя её, в принципе, есть ещё куда допиливать.

Штош. (с) Помимо экспорта в JSON, XML, CSV и HTML, скрипт теперь умеет писать в простую MySQL базу данных на чем и остановлюсь подробнее.

Для записи в базу данных на MySQL сервере надо:

01. Собственно, сам MySQL сервер. Который работает и готов принимать удаленные подключения (У меня он работает под ubuntu-server 22.04 LTS). В README на гитхабе кратко и понятно расписано как установить и настроить mysql-server "step-by-step" даже тем, кто никогда прежде не имел дела с SQL, *nix системами и вот этой вот всей петрушкой.

02. Скрипт hwinfo.ps1 в конфигурационном разделе которого надо указать:

02.1 IP-Адрес MySQL сервера

02.2 Номер порта для подключения.

02.3 Название вашей базы данных MySQL (скрипт для её создания: create_mysql_database.sql)

02.4 Имя пользователя у которого есть право писать в базу данных

02.5 Пароль этого пользователя.

02.6 Так же, надо скопировать MySQL\Connector (MySql.Data.dll) и связанную с ним сборку System.Threading.Tasks.Extensions.dll в папку со скриптом. Их можно загрузить из других источников, с сайта Oracle или через менеджер пакетов типа NuGet. Но только следите за точным совпадением версии сборок, т.н. "соблюдением зависимостей", иначе они работать откажутся. Для меня наиболее простым решением оказалась загрузка вышеуказанных файлов на клиенты. Поскольку инет на клиентах есть не всегда и, соответственно, не всегда возможна загрузка сборок, пакетов и модулей наподобие SimplySQL. Вам, может быть, удобнее будет другой подход. Например, предустановка ODBC драйвера на клиенты или что-то еще.

02.7 Все. Достаточно на удаленном ПК под Windows 10 запустить правильно сконфигурированный скрипт с достаточными правами и он соберет основную информацию о железе и запишет в базу данных MySQL

P.S. Скрипт нормально отработал на нескольких тестовых машинах с "чисто" установленной Windows 10. Поэтому, скорее всего, отработает и у вас :-) В случае чего, баги, проклятия и маты можно писать сюда. Всем добра и все такое.

P.P.S Почему MySQL, а не PostgreSQL, MariaDB, MS SQL, SQLITE и т.д.? Просто потому, что его достаточно для решения задачи.

Показать полностью
[моё] Powershell Windows 10 Mysql SQL Текст
4
VaginaMag
VaginaMag
1 год назад

Перемещать файлы которые старше 15 дней⁠⁠

Не на что не притендую, просто может кому то пригодиться, а то тут задача прилетела.
Создал скрипт который будет перемещать файлы, которые старше 15 дней, в другую папку.
Просто создайте ps1 файл.
Настройте задание в планировщике задач (Task Scheduler) Windows для запуска этого BAT файла раз в 15 дней:

1) Откройте "Планировщик задач".

2) Создайте новую задачу.

3) В разделе "Триггеры" добавьте новый триггер с расписанием "Каждые 15 дней".

4) В разделе "Действия" добавьте новое действие "Запустить программу" и укажите путь к вашему ps1 файлу.

5) Сохраните задачу.

Сам файл.

# Определяем исходную папку, целевую папку и путь к файлу журнала

$source = "D:\Pavel\test"

$destination = "D:\Pavel\servers"

$log = "D:\Pavel\move_log.csv"

# Перемещаем файлы старше 15 дней из исходной папки в целевую папку, сохраняя структуру папок

Get-ChildItem -Path $source -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-15))} | ForEach-Object {

$destPath = $_.FullName -replace [regex]::Escape($source), $destination

$destFolder = Split-Path $destPath -Parent

if (!(Test-Path -Path $destFolder)) {

New-Item -ItemType Directory -Path $destFolder -Force

}

Move-Item -Path $_.FullName -Destination $destPath -Force

}

# Добавляем заголовки в журнал

Add-Content -Path $log -Value "Source, Destination, Date Moved"

# Добавляем записи о перемещенных файлах в журнал

Get-ChildItem -Path $destination -Recurse | ForEach-Object {

$sourcePath = $_.FullName -replace [regex]::Escape($destination), $source

$logData = $sourcePath + "," + $_.FullName + "," + (Get-Date).ToString('yyyy-MM-dd')

Add-Content -Path $log -Value $logData

}

Показать полностью
Powershell IT Длиннопост Скрипт Текст
25
28
igor888888
1 год назад
Лига Сисадминов

Powershell на linux⁠⁠

Есть ли те кто использует powershell на линуксе?

Powershell на linux Windows, Linux, Powershell

С какими подводными камнями столкнулись?


Суть - моя компания очень активно избавляется от винды - а вот переписывать кучу автоматизаций с шелла на тот же питон - я не горю желанием.

Если совместимость неплохая - то скрипты сохраняться только потеряв виндозависимую часть

На reddit тоже спрашивал - но ценной информации ноль....

https://www.reddit.com/r/PowerShell/comments/1cizrrw/comment...

Показать полностью
[моё] Windows Linux Powershell
43
7
CherryBrandy50ml
CherryBrandy50ml
1 год назад

Куда расти из техподдержки ?⁠⁠

Здравствуйте коллеги, у кого есть какие успешные кейсы роста из технической поддержки?

для примера 2 собеседования на техподдержку первой линии, как интересные примеры разных подходов к собеседованиям:

собеседование #1: Вопросы про dns и dhcp. Принципы и основы построения сетей и связывания устройств в сети. Вопросы про то на каком порту работает то и это. отличие Pop3 От Imap. Что делают консольные команды VLOOKUP, tracert и т.п. под конец добил вопросами про RAID массивы...

собеседование #2: Здрасьте здрасьте, то да се, расскажите про предыдущий опыт...гм. Ну понятно(опыта релевантного не было). Ну в целом, если не занят приходи завтра ))

Вот так в итоге я устроился в техподдержку ServiceDesk + звонки. Разбираемся с проблемами у пользователей в 1С (но это не дает пониманию об 1С, не могу сказать что приобретаю опыт по ней, просто визуально теперь не пугает))).
Вопрос в том, на чтобы тратить свободное время чтобы двинуться из техподдержки: Linux?Работа с виртуальными машинами? скрипты на bash и PowerShell ? а мб прастихоспаде 1С ??(все это предполагаю в виде каких-нибудь плейлистов на ютубе или курсов на степике, ибо за курсы уже уплочено не раз - знали плаваем и в любом случае надо учиться самому))))

*Как вариант пройти курс на stepik по SQL. Вижу в банках, вакансии в техподдержке и там из требований в основном SQL (я так понимаю отчетики выводить), но хз есть ли оттуда куда дальше расти.

*есть некий уровень поддержки L2 и чем они там занимаются, какие проблемы решают? (можете привести примеры задач которые становятся перед ними). И есть нечто абстрактно-недостижимое и романтизированное DevOps (судя, по комментариям от знакомых, там все сложно и "лучше не лезь оно сожрет тебя")

Куда вообще можно вырасти из техподдержи ? и куда направить свое внимание для дальнейшего роста? и что не мало важно, если условное программирование и SQL ты еще можешь практиковать на своем стареньком ноуте, то не представляю как практиковать " типичные задачи по практике специалиста технической поддержки (развертывание чего-нибудь и настройка).

Показать полностью
Service Desk 1С SQL Powershell Virtualbox Техническая Карьера Профессия Поиск работы Вакансии Собеседование Трудовые отношения Опыт Карьерный рост Зарплата Системный Блок Системное администрирование Права администратора Текст
21
15
igor888888
1 год назад
Лига Сисадминов

Посчитать размер десятков миллионов папок (dfs)⁠⁠

Привет!

Есть необходимость эпизодически делать отчет по месту на файловых шарах - ACL и размер.

ACL проблем не вызывает, а посчитать размер папки с миллионами вложений - сложнее.

Использую powershell

Get-ChildItem не подходит - медленно

В итоге нашел два решения

1) .net (надежно, медленно)

([System.IO.DirectoryInfo] $_).EnumerateFile('*', 'AllDirectories') | ForEach-Object {$totalSize = $totalSize + $_.Length;}

2) COM - довольно стремно, быстрее иногда в разы

$com = New-Object -comobject Scripting.FileSystemObject

$folder_info = $com.GetFolder($_)

totalSize = $folder_info.size

Рылся по инету месяцами - ничего более не нашел

Есть у кого какие мысли?

[моё] Powershell Dfs Windows Текст
17
53
rudm
rudm
1 год назад
Лига Сисадминов
Серия Программизмы

Powershell скрипт для сбора информации об аппаратной конфигурации компьютера⁠⁠

Поскольку Windows 7 и CMD, а вместе с ней и WMIC, прощаются с нами возникла необходимость переписать предыдущий CMD скрипт для сбора основной информации о железе и софте локального ПК на Powershell.

В новой версии я сделал HTML-таблицу проще, убрал некоторую лишнюю информацию и внес еще кое-какие никому не интересные изменения. Новый скрипт умеет экспортировать данные в *.json, правильный *.csv с кавычками, удобочитаемый *.xml с понятными названиями тегов и в *.html как графическое представление собранной информации.

Зачем нужен этот велосипед, скажете вы, если уже есть hwinfo, aida, msinfo32, siw, everest и прочие? К сожалению, ни одна из вышеперечисленных программ не удовлетворяет полностью моим задачам. Они либо платные, либо требуют установки, либо не умеют в командную строку, либо требуют дополнительных действий со стороны пользователя, либо же их функционал избыточен.

Скрипт же можно изменять под ваши конкретные нужды просто редактируя код в блокноте или Powershell ISE. Linux way, bitch. Пардон. Достаточно не нарушать структуру вложенности главного словаря $PCInfo в котором хранится вся обработанная и готовая к выводу информация. То есть, не плодить еще вложенные словари внутри уже вложенных словарей. Больше словарей богу словарей! (Нет).

Пример работы скрипта при экспорте в *.HTML файл.

Powershell скрипт для сбора информации об аппаратной конфигурации компьютера Программа, Windows, Powershell, Длиннопост

Отображение информации о железе ПК в виде *.HTML файла, для просмотра которого достаточно любого браузера.

Так выглядит информация экспортированная в *.csv и открытая в MS Excel

Powershell скрипт для сбора информации об аппаратной конфигурации компьютера Программа, Windows, Powershell, Длиннопост

Результаты отображения информации в формате *.CSV в программе MIcrosoft Excel

Помните, что в российском Excel разделителем в CSV считается не запятая, а точка с запятой ; Соответственно для корректного отображения *.csv в Excel нужно включить в скрипте использование региональных стандартов.

Если хотим забирать инфу в какую-нибудь NoSQL базу, то лучше всего подойдет экспорт в JSON

Powershell скрипт для сбора информации об аппаратной конфигурации компьютера Программа, Windows, Powershell, Длиннопост

Результаты отображения информации в формате *.JSON

Приятно удивило, что экспорт в JSON в Powershell делается буквально двумя строчками при условии, что вы скармливаете в конвейер [ordered]Dictionary или [PSCustomObject].

Для любителей смотреть CSV в блокноте, можно открыть CSV в блокноте.

Powershell скрипт для сбора информации об аппаратной конфигурации компьютера Программа, Windows, Powershell, Длиннопост

Скромное и лаконичное обаяние *.CSV

Выше показан результат экспорта в правильный международный *.csv, с запятыми в качестве разделителей и токенами в кавычках, как и должно быть согласно CSV стандарту. Акцентирую на этом внимание потому, что некоторые производители, - да, Microsoft? - считают, что заключать токены строки в кавычки при экспорте в *.CSV необязательно.

Экспорт в формат XML. При желании, информацию в таком виде тоже можно хранить в NoSQL базе или просто в виде файлового хранилища на какой-нибудь админской шаре.

Powershell скрипт для сбора информации об аппаратной конфигурации компьютера Программа, Windows, Powershell, Длиннопост

Отображение вывода в *.XML формате

Скачать скрипт с комментариями на английском можно, конечно, с github'a alive-one/PowerShell-System-Hardware-Info: PowerShell script to collect major hardware and some software information on system (github.com)

С комментариями на русском из темы форума ixbt.com Powershell скрипт для сбора информации с локального ПК - Конференция iXBT.com

P.S. Скрипт можно сделать более функциональным:

01. Добавить возможность собирать информацию об удаленных компьютерах без загрузки на эти самые компьютеры. Хотя, в принципе, ничто не мешает вам, как админу, загружать скрипт на компьютеры пользователей и писать информацию в нужном формате на шару. Или же сразу забирать с клиентов готовые результаты.

02. Писать собранную информацию в, например, MySQL базу данных.

03. Собирать более детальную информацию о статусе и состоянии жестких дисков.

Если это нужно кому-то кроме меня, прошу поддержать меня рублем. Чтобы я знал, что не зря трачу время. Поскольку время моё ограничено, увы, а финансовая жопа постоянна, двойное увы.

Показать полностью 5
[моё] Программа Windows Powershell Длиннопост
40
29
pwnmine
pwnmine
1 год назад
Лига Сисадминов

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)>⁠⁠

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Вводная по примеру скрипта:

Вводишь номер объекта в скрипт, он ищет на нём ПК в Active Directory и выдаёт информацию по количеству свободного места на диске и размеру диска. Выделенная область не совсем понятна. Знак доллара, собака, вот это вот всё. Если есть возможность разжевать цикл для тупых) и как это склеивается с командлетом.

Пример присланного скрипта на разбор (@5ma5h)

if ($SearchBase -ne "0"){

$PCs = Get-ADComputer -Filter * -SearchBase $SearchBase | select Name

for ($i=0; $i -lt $PCs.Length; $i++){

try{

Get-WmiObject win32_volume -ComputerName $PCs[$i].Name -ErrorAction Stop |

where {$_.Name -eq 'C:\' } |

select @{n='ComputerName'; e={$_.__SERVER}}, Name, @{n='Capacity'; e={"{0:N2}" -f ($_.Capacity/1GB)}}, @{n='FreeSpace';e={"{0:N2}" -f ($_.FreeSpace/1GB)}}

} catch {

Write-Host "ERROR!" $PCs[$i].Name $_ -ForegroundColor Red

}

}

Clear-Variable -Name "PCs"

}else{

Write-Warning "The entered value is incorrect"

}

Немного теории про переменные:

Переменная — это единица памяти, в которой хранятся значения. Рекомендуется, чтобы имена переменных включали только буквенно-цифровые символы и символ подчеркивания (_). Имена переменных, включающие пробелы и другие специальные символы, трудно использовать и следует избегать.

В PowerShell существует несколько различных типов переменных.

  • Созданные пользователем переменные: созданные пользователем переменные создаются и поддерживаются пользователем. По умолчанию переменные, созданные в командной строке PowerShell, существуют только во время открытия окна PowerShell. При закрытии окон PowerShell переменные удаляются. Чтобы сохранить переменную, можно добавить ее в профиль PowerShell. Можно также создавать переменные в скриптах с глобальными, скриптами или локальными область.

  • Автоматические переменные: автоматические переменные хранят состояние PowerShell. Эти переменные создаются PowerShell, и PowerShell изменяет их значения в соответствии с требованиями, чтобы обеспечить их точность. Пользователи не могут изменить значение этих переменных. Например, $PSHOME переменная сохраняет путь к каталогу установки PowerShell.

  • Переменные предпочтения: переменные предпочтения хранят пользовательские настройки для PowerShell. Эти переменные создаются PowerShell и заполняются значениями по умолчанию. Пользователи могут изменять значения этих переменных. Например, $MaximumHistoryCount переменная определяет максимальное количество записей в журнале сеансов.

Теперь с картинками:

  • Переменные в powershell начинаются со знака "$". Имена переменных не зависят от регистра, то есть переменные $nameVar и $NAMEvar - одна и та же переменная. Присвоение значения переменной происходит через оператор "=".

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост
  • Имена переменных могут включать пробелы и специальные символы. Например: ${name of variable}. Использование такой вариации имени сомнительно, но поддерживается.

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост
  • После присвоения значения переменная будет иметь свой тип. У всех типов переменных есть общие и уникальные свойства и методы, к которым можно обращаться через точку. Для того, чтобы узнать какие методы и свойства есть у текущей переменной, можно воспользоваться командой Get-Member, как в примере ниже.

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Тип переменной $name - System.String, то есть строковый.

Для работы с массивами объектов в переменных 2 очень важных свойства:

Length (длина) и Count (количество). Зачастую данные свойства используют для определения элементов в массиве, но часто ошибочно используют Length, когда желательно использовать Count. Дело в том, что свойство Length действительно в большинстве сценариев отображает количество элементов массива, кроме случая, когда в массиве один элемент строкового типа. В этом случае свойство Length выдаст количество символов в строке.

Примеры получения этих свойств ниже:

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Разница в значении свойств Length и Count проявляется в примере переменной $var_text. Свойство Length отобразило количество символов в строке (длину). Свойство Count отобразило отобразило количество строк (или объектов в массиве). Поэтому для корректности крайне рекомендуется использовать свойство Count для определения количества элементов массива.

Анализ

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

Начнём с того, что приведем скрипт в читаемый вид, выровняв основные блоки кода:

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Отформатированный в читаемый вид изначальный текст скрипта.

На вход описанному блоку скрипта должна прийти переменная $SearchBase со значением отличным от символа "0". Открывает выполнение кода условный оператор if () else. Условие проверки странное, так как минимально необходимая обычно проверка - это проверка на пустоту какой-либо необходимой для выполнения блока кода переменной, но для этого достаточно оставить в проверке if переменную без операторов сравнения. Здесь же у нас if получит TRUE в случае, если $SearchBase не будет эквивалентен символу "0".

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Учитывая, что нам не известно какие значения $SearchBase может принимать, менять логику проверки не стоит. С учетом анализа дальнейшего использования данной переменной, становится ясно, что она используется для определения области в домене Active Directory, из которой будут выбираться объекты компьютеров в командлете Get-ADComputer

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Исходя из этого (и из примеров использования Get-ADComputer), переменная $SearchBase должна содержать строку DN (Distinguished Name) контейнера Active Directory в формате

CN=Computers,OU=Desktop,OU=Moscow,DC=domainName,DC=local

Допустим, в переменной $SearchBase у нас все таки что-то похожее на Distinguished Name контейнера в AD (либо корень домена - "DC=domainName,DC=local, такое определение области тоже имеет место быть). Идем дальше: алиас select меняем на полное имя командлета Select-Object

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Здесь у нас происходит следующее: сначала получаем все объекты компьютеров из AD по указанному контейнеру в переменной $SearchBase.

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Затем по конвейеру (символ | ) результаты выполнения этой команды передаются на команду Select-Object:

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Командлет Select-Object выбирает указанные свойства объекта или набора объектов. В нашем случае из свойств объектов компьютеров Active Directory выбирается только свойство Name. Набор свойств по умолчанию, доступных в объекте компьютера, возвращаемый командлетом Get-ADComputer представлен ниже.

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Затем все имена компьютеров сохраняются в переменную $PCs. То есть, если после оператора присвоения переменной (символ =) происходит выполнение нескольких командлетов с передачей результатов по конвейеру, в переменную будет сохранен результат выполнения последнего командлета (в нашем случае это Select-Object).

Таким образом, в переменную $PCs (при корректной передаче $SearchBase, естественно) будет сохранен массив свойства Name объектов компьютеров из AD. Примерно следующего вида:

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Далее идет цикл For для обработки элементов массива переменной $PCs.

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

В условиях цикла For стоит перебор по одному элементу массива $PCs, начиная c нулевого ($i=0; $i -lt $PCs.Length; $i++). Условием остановки цикла является перечисление всех объектов из переменной. Для решения данной задачи немного проще использовать цикл Foreach, но про него поговорим в следующей статье. Единственное исправим $PCs.Length на $PCs.Count

Затем, для каждого элемента массива выполняется конструкция Try {} Catch {}.

Блок Try {} будет выполняться для каждого элемента массива, блок Catch {} будет выполнен только в случае, если в блоке Try будет зарегистрирована исключительная ситуация (ошибка при выполнении командлета, например).

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

В блоке Try {} выполняется три командлета:

  • получение информации о Wmi-объекте win32_volume (раздел диска) с удаленного компьютера (командлет Get-WmiObject). Первый параметр командлета Get-WmiObject -Class является позиционным, и его можно не указывать, но такая практика не является рекомендуемой, так как это усложняет чтение кода. Второй параметр -ComputerName определяет имя сервера \ рабочей станции из массива переменной $PCs. Так как в переменной $PCs у нас хранится массив свойств Name, то к этому свойству через символ точки и обращаемся, при этом указав порядковый номер элемента с помощью квадратных скобок. То есть, в записи $PCs[$i].Name - $PCs это весь массив свойств имен компьютеров из Active Directory. В квадратных скобках указан текущий номер элемента массива в цикле For, а если это первая итерация, то там у нас будет 0. И через символ точки "." мы получаем имя компьютера для передачи в параметр -ComputerName. Параметр -ErrorAction определяет поведение консоли при обработке вероятной ошибки (исключительной ситуации, например компьютер целевой не доступен и не удается получить информацию), при выполнении данного командлета.

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост
  • Значение параметра -ErrorAction Stop означает, что в случае исключительной ситуации, дальнейшее выполнение блока Try {} будет прекращено в рамках данного прохода цикла For и будет выполнен код из блока Catch {}, который как раз и служит для отработки кода в исключительных ситуациях.

Для того, чтобы понимать происходящее в коде, крайне важно понимать с каким объектом (и какие у него свойства) в данный момент происходит действо.

Для примера, разберем какого типа возвращает объекты командлет Get-WmiObject. Для этого попробуем выполнить следующее:

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Таким образом, можно увидеть какие свойства и какие значения этих свойств есть у объекта типа win32_volume. Вывод свойств по умолчанию у объектов разный, и зачастую избыточен, поэтому после того, как вы поняли какие свойства вас интересуют, полезно будет научиться использовать следующие командлеты:

Select-Object - командлет, используемый для отображения только указанных свойств переданных по конвейеру объектов:

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Where-Object - командлет, используемый для фильтрации массива объектов по условному свойству (или совокупности свойств). Рассмотрим пример ниже с массивом объектов-служб в переменной $services. Допустим, нам необходимо отфильтровать и получить только сервисы в переменную $targetService которые имеют в DisplayName слово "Update" и у которых статус "Running":

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Фигурные скобки с условиями для командлета Where-Object практически всегда используются, поэтому просто привыкните пока использовать данный командлет в таком режиме. Из нового здесь у нас использование переменной $_ - что это такое и зачем она нужна.

Если вкратце, то $_ это алиас для автоматической переменной $PSItem PowerShell, используемый в скриптблоках, обрабатывающих текущий объект, например в конвейере. То есть $_ хранит в себе текущий объект, переданный по конвейеру.

Вернемся к нашим баранам

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Далее по скрипту передача по конвейеру Wmi-объекта на командлет Where-Object с целью фильтрации. Условием для фильтрации является эквивалентность свойства Name WMI-объекта значению "C:\". То есть, фильтр выставлен, чтобы дальше по конвейеру пошли только объекты, которые являются логическим диском C:\.

Затем используется уже известный командлет Select-Object, но с интересным способом изменения отображаемых полей свойств приходящего WMI-объекта при отображении:

  • свойство __SERVER меняется ComputerName

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост
  • свойство Capacity останется в таком же виде, но значение его будет изменено согласно формуле $_.Capacity/1GB.

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост
  • свойство FreeSpace останется в таком же виде, но значение будет изменено согласно формуле $_.FreeSpace/1GB.

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост
  • Также будет выведено свойство Name без изменений

Касательно изменений значений объема и свободного - $_Freespace / 1GB.

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост

Такого рода преобразование используется в случаях когда значения свойств хранятся с байтах (а это наш случай), а мы хотим вывести значение в гигабайтах.

Затем идет блок кода Catch, в котором отработает командлет Write-Host - который красным цветом напишет в консоль "ERROR!", имя текущего сервера, по которому не удалось отработать блок Try. Далее, в конце каждой итерации сработает командлет очистки переменной $PCs. Затем описано блок Else, скриптблок которого отработает в случае, если условие $SearchBase -ne "0" не будет выполнено. Скриптблок содержит один командлет, который напишет текст "The entered value is incorrect" в консоль.

Конечный, немного поправленный блок скрипта выложу картинкой

Cat's & Lamp. Powershell. Разбор примеров. Часть 1. <(x..o)> Powershell, Системное администрирование, Автоматизация, Гифка, Длиннопост
Показать полностью 25
[моё] Powershell Системное администрирование Автоматизация Гифка Длиннопост
3
23
pwnmine
pwnmine
1 год назад
Лига Сисадминов

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)>⁠⁠

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост

А как это трогать?

Powershell поддерживает следующие полезные интерактивные действа на клавиатуре, помимо ввода символов в консоль:

  • Стрелка влево \ вправо: перемещение курсора влево и вправо посимвольно

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Shift+стрелка влево \ вправо: выделение текста посимвольно по направлению стрелки

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Ctrl+стрелка влево \ вправо: перемещение курсора по направлению стрелки по словам

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Ctrl+Shift+стрелка влево \ вправо: выделение текста по слову за нажатие

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Кнопка Home: перемещение курсора в начало строки

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Кнопка End: перемещение курсора в конец строки

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Кнопка F1: показать справку команде, на которой расположен курсор

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Кнопка Delete: удаление символа после курсора

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Ctrl+Delete: удаление слова после курсора

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Кнопка Backspace: удаление символа перед курсором

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Ctrl+Backspace: удаление слова перед курсором

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Стрелки вверх \ вниз: перемещение вверх и вниз по истории команд

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Ctrl+W : Закрыть текущее окно консоли

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Ctrl+C \ Ctrl+V: классика - копировать \ вставить из буфера обмена

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост
  • Кнопка Tab : автозавершение командлета

Cat's & Lamp. Powershell - образовательное. Часть 1 <(o,,O)> Автоматизация, Системное администрирование, Powershell, Картинка с текстом, Скрипт, Гифка, Длиннопост

Сегодня скучно, но это нужно знать :)

P.S. Лайфак напоследок, если в консоли (powershell \ cmd \ проводник) выполнить ncpa.cpl в Windows, в моментах жить станет приятнее.

P.P.S. Для 14ти моих подпищикш - накидывайте в комменты темы, если интересуют практические кейсы по автоматизации рутинных операций на PoSh.

Показать полностью 16
[моё] Автоматизация Системное администрирование Powershell Картинка с текстом Скрипт Гифка Длиннопост
11
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии