Взаимодействия с ОС через командный интерфейс. Практика 1

Содержание

Слайд 2

Команды CMD 2 из 16

Команды CMD

2 из 16

Слайд 3

Команды PowerShell 3 из 16

Команды PowerShell

3 из 16

Слайд 4

PowerShell Командная оболочка с языком сценариев, изначально созданная на основе платформы

PowerShell

Командная оболочка с языком сценариев, изначально созданная на основе платформы .NET

Framework, а позднее — на .NET Core
Работает с классами .NET, у которых есть свойства и методы
Дает доступ к объектам COM, WMI и ADSI

4 из 16

Слайд 5

Командлеты (cmdlets) Это специализированные классы .NET, в которые заложена разнообразная функциональность

Командлеты (cmdlets)

Это специализированные классы .NET, в которые заложена разнообразная функциональность
Именуются они

по принципу «Действие-Объект» (например, Get-Help – «Показать справку»)

Полный список командлетов в системе можно получить, выполнив команду в оболочке PowerShell
Get-Command -CommandType cmdlet

5 из 16

Слайд 6

Алиасы Для часто используемых командлетов и внешних утилит в Windows PowerShell

Алиасы

Для часто используемых командлетов и внешних утилит в Windows PowerShell есть

короткие синонимы – алиасы
Полный список синонимов можно посмотреть с помощью командлета Get-Alias
Например, dir – алиас для командлета Get-ChildItem

6 из 16

Найти командлет, соответствующий алиасу ls
Найти алиас, соответствующий командлету Get-ChildItem

Get-Alias -Definition Get-ChildItem

Get-Alias ls

Слайд 7

Программные инструменты Windows PowerShell Windows Powershell – эмулятор консоли с командной

Программные инструменты Windows PowerShell

Windows Powershell – эмулятор консоли с командной оболочкой
Windows PowerShell

ISE – полноценная среда разработки с редактором кода, который поддерживает вкладки, подсветку синтаксиса; конструктором команд; встроенным отладчиком  

7 из 16

Слайд 8

Windows PowerShell ISE 8 из 16

Windows PowerShell ISE

8 из 16

Слайд 9

Включить выполнение скриптов в PowerShell (из под администратора) 9 из 16

Включить выполнение скриптов в PowerShell (из под администратора)

9 из 16

Слайд 10

CMD vs PowerShell 10 из 16

CMD vs PowerShell

10 из 16

Слайд 11

PowerShell. Обработка ошибок 11 из 16 # Обработка ошибки подход "До"

PowerShell. Обработка ошибок

11 из 16

# Обработка ошибки подход "До"
function mydel1([int]$a,

[int]$b){
if ($b -ne 0){
$c = $a / $b
Write-Output $c
}
else{
Write-Output "Деление на ноль!"
}
}
# Обработка ошибки подход "После" (обработка исключений)
function mydel2([int]$a, [int]$b){
try{
$c = $a / $b
Write-Output $c
}
catch{
Write-Output "Деление на ноль!"
}
}
Слайд 12

PowerShell. Аргументы по умолчанию и именованные параметры 12 из 16 #

PowerShell. Аргументы по умолчанию и именованные параметры

12 из 16

# Вычисление

площади
function square([float]$a, [float]$b=0){
if ($b -eq 0) {
# Вычисляем площадь квадрата
return $a * $a
}
else{
return $a * $b
}
}
# Вызовы функции
square 5 6
# Пример: Аргумент b задан по умолчанию
square 5
# Использование именованных параметров
square -b 6 -a 7
Слайд 13

PowerShell. Лямбда-функции 13 из 16 # Лямбда-функция (функция без имени) #

PowerShell. Лямбда-функции

13 из 16

# Лямбда-функция (функция без имени)
# Можно функцию присвоить

в переменную
$f = {
param([float]$a, [float]$b=0)
if ($b -eq 0) {
# Вычисляем площадь квадрата
return $a * $a
}
else{
return $a * $b
}
}
# Вызовы функции-переменной
# Вариант вызова 1
& $f 7 8
# Вариант вызова 2
$f.Invoke(7,8)
Слайд 14

PowerShell. Скрипт с параметрами 13 из 16 # Указываем входные параметры

PowerShell. Скрипт с параметрами

13 из 16

# Указываем входные параметры файла скрипта
param([float]$a,

[float]$b)
# Вычисление площади
if ($b -eq 0) {
# Вычисляем площадь квадрата
return $a * $a
}
else{
return $a * $b
}
Слайд 15

Скрипт: изменить расширение файлов в текущей папке Использование конвейера команд: результат

Скрипт: изменить расширение файлов в текущей папке

Использование конвейера команд:
результат выполнения командлета

Get-ChildItem подается на вход следующему командлету Rename-Item

14 из 16

Get-ChildItem . *.txt | Rename-Item -NewName { $_.Name -replace '.txt', '.log'}

dir . *.txt | ren -NewName { $_.Name -replace '.txt', '.log'}

Аналог с использованием алиасов

Слайд 16

Скрипт: изменить название файлов в текущей папке 15 из 16 #

Скрипт: изменить название файлов в текущей папке

15 из 16

# Получаем список

файлов текущей директории
$files = Get-ChildItem
Write-Output $files.Count
for ($i=0; $i -lt $files.Count; $i++) {
Write-Output $files[$i].Name
# Демонстрация механизма параллельного присваивания
$name, $ext = $files[$i].BaseName, $files[$i].Extension
# Формируем новое имя для текущего файла
$newname = $name + "999" + $ext
Write-Output $newname
# Заменяем имя текущего файла
Rename-Item $files[$i].Name $newname
}