Школа Geek: Написание первого скрипта PowerShell

Оглавление:

Школа Geek: Написание первого скрипта PowerShell
Школа Geek: Написание первого скрипта PowerShell

Видео: Школа Geek: Написание первого скрипта PowerShell

Видео: Школа Geek: Написание первого скрипта PowerShell
Видео: Как закрыть или завершить процесс, зависшую программу или вирус в командной строке - YouTube 2024, Апрель
Anonim
Несколько недель назад The Geek показал вам, как вы можете использовать командную строку, чтобы найти, когда ваш компьютер был запущен последним. В этой последней установке Geek School для PowerShell мы собираемся написать многократно используемую команду PowerShell, чтобы сделать то же самое.
Несколько недель назад The Geek показал вам, как вы можете использовать командную строку, чтобы найти, когда ваш компьютер был запущен последним. В этой последней установке Geek School для PowerShell мы собираемся написать многократно используемую команду PowerShell, чтобы сделать то же самое.

Обязательно прочитайте предыдущие статьи в серии:

  • Узнайте, как автоматизировать Windows с помощью PowerShell
  • Обучение использованию командлетов в PowerShell
  • Обучение использованию объектов в PowerShell
  • Форматирование, фильтрация и сравнение обучения в PowerShell
  • Научитесь использовать Remoting в PowerShell
  • Использование PowerShell для получения информации о компьютере
  • Работа с коллекциями в PowerShell
  • Узнайте, как использовать вакансии в PowerShell
  • Узнайте, как расширить PowerShell
  • Изучение переменных PowerShell, ввода и вывода

Написание первого скрипта

Первое, что нам нужно сделать, это найти способ доступа к информации, которую мы ищем. Поскольку мы имеем дело с информацией управления, нам, вероятно, нужно взглянуть на использование WMI, у которого действительно есть класс под названием Win32_OperatingSystem, который позволяет вам просматривать подробные сведения о вашей операционной системе, в том числе в последний раз, когда он запускался.

Итак, теперь, когда мы знаем, где мы можем найти информацию, которую мы ищем, откройте ISE и введите следующее.
Итак, теперь, когда мы знаем, где мы можем найти информацию, которую мы ищем, откройте ISE и введите следующее.

Get-WmiObject -Class Win32_OperatingSystem –ComputerName localhost |

Select-Object -Property CSName,LastBootUpTime

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

Теперь нажмите зеленую кнопку «Запустить сценарий» или нажмите клавишу F5 на клавиатуре, чтобы проверить код.
Теперь нажмите зеленую кнопку «Запустить сценарий» или нажмите клавишу F5 на клавиатуре, чтобы проверить код.
Время WMI может быть немного загадочным. Под этим мы подразумеваем, если вы посмотрите на свойство LastBootUpTime, это говорит о 2013-03-19 в 18:26:21, но по какой-то причине ребята WMI решили объединить все это в одну строку. К счастью для нас, нам не нужно беспокоиться о ручном анализе строки, поскольку есть более простой способ сделать это, хотя и более продвинутый. Вам нужно будет изменить часть Select-Object кода, чтобы она выглядела следующим образом:
Время WMI может быть немного загадочным. Под этим мы подразумеваем, если вы посмотрите на свойство LastBootUpTime, это говорит о 2013-03-19 в 18:26:21, но по какой-то причине ребята WMI решили объединить все это в одну строку. К счастью для нас, нам не нужно беспокоиться о ручном анализе строки, поскольку есть более простой способ сделать это, хотя и более продвинутый. Вам нужно будет изменить часть Select-Object кода, чтобы она выглядела следующим образом:

Select-Object -Property CSName,@{n=”Last Booted”;

e={[Management.ManagementDateTimeConverter]::ToDateTime($_.LastBootUpTime)}}

Здесь мы создаем настраиваемое свойство «Last Booted» и указываем, что его значение должно быть результатом вызова статического метода ToDateTime в свойстве LastBootUpTime текущего объекта конвейера. Теперь ваш код должен выглядеть так.

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

C:Get-LastBootTime.ps1

Теперь переключитесь на нижнюю половину ISE и запустите следующее:
Теперь переключитесь на нижнюю половину ISE и запустите следующее:

C:Get-LastBootTime.ps1

Большой! Наш скрипт работает так, как ожидалось, однако есть еще одна проблема с нашим скриптом. Мы жестко запрограммировали имя компьютера, на котором хотим получить последнее время загрузки. Вместо значений hardcoding мы должны скорее предоставить параметр, чтобы тот, кто использует скрипт, мог выбрать, с какого компьютера он запускает скрипт. Для этого перейдите в начало скрипта и выполните следующее.
Большой! Наш скрипт работает так, как ожидалось, однако есть еще одна проблема с нашим скриптом. Мы жестко запрограммировали имя компьютера, на котором хотим получить последнее время загрузки. Вместо значений hardcoding мы должны скорее предоставить параметр, чтобы тот, кто использует скрипт, мог выбрать, с какого компьютера он запускает скрипт. Для этого перейдите в начало скрипта и выполните следующее.

param( [string]$ComputerName )

Затем замените hardcoded localhost value на переменную $ ComputerName. Теперь ваш скрипт должен выглядеть следующим образом:

Сохраните свой сценарий, затем вернитесь к нижней половине ISE и просмотрите справку для вашего скрипта.
Сохраните свой сценарий, затем вернитесь к нижней половине ISE и просмотрите справку для вашего скрипта.

help C:Get-LastBootTime.ps1

Удивительно, поэтому теперь мы можем указать имя компьютера, на котором хотим получить последнее время загрузки для использования нашего нового параметра ComputerName. К сожалению, все еще есть кое-что не так. Во-первых, параметр ComputerName является дополнительным, а во-вторых, это самый уродливый, который я когда-либо видел, поэтому давайте быстро исправить эти проблемы. Чтобы сделать параметр ComputerName обязательным, измените содержимое блока параметров на следующее.
Удивительно, поэтому теперь мы можем указать имя компьютера, на котором хотим получить последнее время загрузки для использования нашего нового параметра ComputerName. К сожалению, все еще есть кое-что не так. Во-первых, параметр ComputerName является дополнительным, а во-вторых, это самый уродливый, который я когда-либо видел, поэтому давайте быстро исправить эти проблемы. Чтобы сделать параметр ComputerName обязательным, измените содержимое блока параметров на следующее.

[Parameter(Mandatory=$true)][string]$ComputerName

Что касается создания лучшего файла справки, наиболее распространенным методом является использование помощи, основанной на комментариях. Это означает, что мы просто добавляем дополнительный длинный комментарий в верхний скрипт.

<#.SYNOPSIS Shows when last your PC started up..DESCRIPTION This is a WMI wrapper function to get the time that your PC last started up..PARAMETER ComputerName The name of the Computer you want to run the command against..EXAMPLE Get-LastBootTime -ComputerName localhost.LINK www.howtogeek.com #>

Как только все будет сделано, вы должны получить сценарий, похожий на этот.

Рекомендуемые: