Skip to main content

Школа Geek: написання першого повного сценарію PowerShell

Школа Geek: написання першого повного сценарію PowerShell

Geoffrey Carr

Кілька тижнів тому Geek показав вам, як можна скористатися командним рядком, щоб знайти останню версію вашого комп'ютера. У цій останній установці Geek School для PowerShell ми збираємося написати команду PowerShell, яка буде багаторазово використана, щоб зробити те саме.

Обов'язково прочитайте попередні статті у серії:

  • Дізнайтеся, як автоматизувати Windows за допомогою PowerShell
  • Навчитися використовувати командлети в PowerShell
  • Навчання Як використовувати об'єкти в PowerShell
  • Навчання форматування, фільтрації та порівняння в PowerShell
  • Навчіться використовувати Remoting у PowerShell
  • Використання PowerShell для отримання інформації про комп'ютер
  • Робота з колекціями в PowerShell
  • Дізнайтеся, як використовувати робочі місця у PowerShell
  • Дізнайтеся, як розширити PowerShell
  • Навчання PowerShell змінних, вхідних і вихідних даних

Написати свій перший сценарій

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

Отже, тепер, коли ми знаємо, де ми можемо знайти потрібну інформацію, відкрийте ISE і наберіть наступне.

Get-WmiObject -Class Win32_OperatingSystem –ComputerName localhost |

Select-Object -Property CSName,LastBootUpTime

Примітка. Мені довелося розділити мій код на дві лінії так, щоб воно повністю вписувалося в знімок екрана, але не можете вводити його на одній лінії. Якщо ви вирішите розділити його на дві рядки, переконайтеся, що символ труби є останнім символом рядка 1.

Тепер натисніть зелену кнопку "Запустити сценарій" або натисніть клавішу F5 на клавіатурі, щоб перевірити код.

Час WMI може бути трохи загадковим. Цим ми маємо на увазі, якщо ви подивитеся на властивість LastBootUpTime, це каже, 2013-03-19 в 18:26:21, але чомусь хлопці WMI вирішили об'єднати все це в одне рядок. На щастя для нас, нам не потрібно турбуватися про ручну розбір рядка, оскільки є простий спосіб зробити це, хоча і більш просунутий. Вам потрібно буде змінити частину коду Select-Object, щоб виглядати так:

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

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

Тут ми створюємо спеціальну властивість, що називається "Остання завантажена", і зазначимо, що її значення має бути результатом виклику статичного методу ToDateTime в властивості LastBootUpTime поточного об'єкта трубопроводу. Ваш код тепер повинен виглядати так.

Запуск коду тепер дасть значно більш читаний останній час завантаження.

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

C:Get-LastBootTime.ps1

Тепер перейдіть до нижньої половини ISE і запустіть наступне:

C:Get-LastBootTime.ps1

Чудово! Наш скрипт працює як очікується, однак ще є одна проблема з нашим сценарієм. Ми жорстко кодували ім'я комп'ютера, яким хочеться отримати останній час завантаження. Замість жорсткого кодування значень ми повинні краще створити параметр таким чином, щоб кожен, хто використовує цей сценарій, міг вибрати, який комп'ютер вони запускають за сценарієм. Для цього перейдіть у верхній частині вашого сценарію та виконайте наступне.

param( [string]$ComputerName )

Потім замініть значення hardcoded localhost за допомогою змінної $ ComputerName. Ваш скрипт має виглядати наступним чином:

Збережіть свій сценарій, а потім поверніться до нижньої половини ISE і перегляньте довідку для свого сценарію.

help C:Get-LastBootTime.ps1

Чудово, так що тепер ми можемо вказати ім'я комп'ютера, яким ми хочемо отримати останній час завантаження для використання нашого нового параметра ComputerName. На жаль, є ще кілька помилок. По-перше, параметр ComputerName є необов'язковим, а по-друге, це найгірший корисний я коли-небудь бачив, тому ми вирішимо ці проблеми швидко. Щоб зробити параметр ComputerName обов'язковим, змініть вміст блоку param на наступне.

[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 #>

Після того, як все це буде зроблено, ви повинні закінчити сценарій виглядає так.

Тепер давайте відвідаємо наш новий файл довідки.

Ахх, дивлячись чудово! Тепер, коли наш сценарій завершений, ми маємо одне останнє, що потрібно зробити: тестування. Для цього я вийду з ISE і повернуся на консоль PowerShell, щоб ми могли переконатися, що аномалій немає.

Якщо ви починаєте з простого вкладиша і просто продовжуєте будувати на ній, як ми це зробили в цьому посібнику, то ви отримаєте повз це в найкоротші терміни. Це все для цього часу людей, побачимо вас у наступній установці Geek School.

Link
Plus
Send
Send
Pin