Вводное:
|
powershell = командная оболочка, язык сценариев 1. Глагол - существительное (действие) - (объект) 2. Все время работаем с объектами |
Начало работы:
|
Клавиша "TAB" авто дополнение ввода команд. Get-Service - показать службы Get-Process - показать процессы history - показать историю команд |
Начало работы со справкой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
Get-help - справка общая Get-Command - справка по команде -Verb - глагол / действие Get-Command -Verb Get - покажет команды начинающиеся на Get -Noun - существительное / объект Get-Command -Noun service - покажет команды управления службами Get-Command -Noun Module - покажет команды управления модулями Get-Help Get-Module - показать справку по команде Get-Module где мы увидим интересный ключ -ListAvailable Get-Module -ListAvailable - покажет все доступные команды модуля Get-Module Get-Command -Module NetTCPIP - покажет информацию по функции NetTCPIP Get-Command -Module NetAdapter - покажет информацию по функции NetAdapter Help - помощь алиас команды Get-Help Update-Help - обновление справочника команд Get-Help Get-NetIPAddress - получить справку по модулю Get-NetIPAddress Get-Help Get-NetIPAddress -Detailed - получить справку по модулю Get-NetIPAddress, подробнее Get-Help Get-NetIPAddress -Full - получить справку по модулю Get-NetIPAddress, все что есть Get-Help Get-NetIPAddress -Examples - получить примеры использования команды Get-Help *IPaddress* - будет показано все команды где встречается *IPaddress* Get-Help about* - будут показаны файлы abaut, они не связаны с конкретным модулем или функциями но в них есть интересная информация. Get-Help about_aliases - будет показана справка по about_aliases Get-Alias - показать все синонимы команд |
Поиск команд кратко:
|
Update-Help Get-Command -Verb -Noun -Module Get-Module -ListAvailable Get-Help "Название команды" -Detailed -Full -Examples -Online |
Пример поиска команды создания директории:
|
Get-Help mkdir - я помню что в cmd команда звучит как mkdir, ищу и нахожу команду New-Item Get-Help New-Item - получаю справку по команде New-Item Get-Help New-Item -Examples - получаю примеры использования New-Item -Path .\zxc1234 -ItemType Directory - создаю директорию zxc1234 в текущем каталоге |
Конвейер:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
!!! В powershell самая важная часть это конвейеры! Get-Service | Sort-Object Status | Select-Object -First 10 - нам покажут следующие: Get-Service выведет список сервисов и передаст дальше по конвейеру, Sort-Object примет данные, отсортирует по Status и отправит далее, Select-Object выберет первые 10 объектов и выведет результат на экран. Для использования конвейера нужно понимать следующие: 0. Какие объекты передаются - свойства - методы 1. Какие свойства у объектов Get-Member - полезная команда позволяет узнать свойства объекта и методы, параметры Get-Service | Get-Member - узнаем какие есть методы и свойства у команды Get-Service Get-Service | Get-Member -MemberType Properties - узнаем какие есть свойства у команды Get-Service dir - алиас команды Get-ChildItem dir c:\ Get-ChildItem c:\ dir c:\ | Get-Member dir c:\windows | Get-Member -MemberType Property Get-Process Get-Process |Get-Member Get-Process | Sort-Object -Property CPU По умолчанию отображается по возрастанию а параметр "-Descending" позволяет отсортировать с большего к меньшему. Get-Process | Sort-Object -Property CPU -Descending Что бы показать последние первые пять можно сделать выборку Select-Object -First 5 Get-Process | Sort-Object -Property CPU -Descending |Select-Object -First 5 -Property - это свойство объекта -Method - это действие над объектом Get-Service | Get-Member -MemberType Method - покажет доступны методы для Get-Service Get-Service | Select-Object -First 3 - покажет первые три службы Для выполнения метода есть специальная конструкция "ForEach-Object метод" Get-Service | Select-Object -First 3 | ForEach-Object Stop Get-Service | Out-File "xxx.txt" - перенаправить вывод команды в файл Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First 10 | Out-File "ten_process_use_cpu.txt" - сохранит в файл ten_process_use_cpu.txt вывод команд в конвейере, там будет 10 процессов использующих больше всех CPU. Out-File - это перенаправление вывода, и подходит для чтения человеком Export-CSV - это специальный формат csv удобно читаемы для машины Get-Service | Export-Csv "get_service.csv" Get-Process |Sort-Object -Property CPU -Descending | Select-Object -First 10 | Export-CSV "ten_process_use_cpu.csv" Import-Csv .\get_service.csv - выведет на экран содержимое CSV файла Import-Csv .\get_service.csv | Get-Member - спросим у Get-Member что это Import-Csv .\get_service.csv | Select-Object -First 1 Format-Table - выполнит форматирование отображения в виде таблицы Format-Wide - выведет форматирование отображения в сокращенном виде Import-Csv .\get_service.csv | Select-Object -First 1 | Format-Table Import-Csv .\get_service.csv | Select-Object -First 1 | Format-Wide Import-Csv .\get_service.csv | Select-Object -First 1 | ForEach-Object start Import-Csv .\get_service.csv | Select-Object -First 1 | ForEach-Object stop |
Абстракция файловой системы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
Get-ChildItem ...-item ...-Content ...-ItemProperty + ...-PSDrive ...-PSProvider dir Get-Alias dir Get-ChildItem Get-Command -Noun ChildItem Get-Help Get-ChildItem Get-Alias md - cоздать директорию md алиас mkdir Get-Alias rd - удалить директорию rd алиас Remove-Item В powershell для работы с файловыми системами(AD, SQL бд, фс, реестр, и т.д.) microsoft придумал специальный драйвер PSProviders Get-PSProvider - покажет доступные psproviders Get-PSDrive - покажет доступные подключенные диски\разделы диска Dir C:\ - показать содержимое диска c:\ Dir HKCU:\ - показать содержимое реестра HKCU Dir HKLM:\ - показать содержимое реестра HKLM Dir Env:\ - показать переменные окружения Get-Command -Noun PSDrive - смотрим что мы можем делать с PSdrive Get-Help New-PSDrive - смотрим что может делать команда New-PSDrive New-PSDrive [-Name] <System.String> [-PSProvider] <System.String> [-Root] <System.String> - синтаксис из Get-Help, требуется указать -Name Имя_точки_монтирования, -PSProvider испозуемый_провайдер, -Root Что_монтируем New-PSDrive Power -PSProvider Registry -Root "HKCU:\Control Panel\Powercfg" - монтирование ветки реестра HKCU:\Control Panel\Powercfg в Power Get-PSDrive - смотрим доступные провайдеры Dir Power:\ - показываем содержимое Get-Command -Noun Item - смотрим что мы можем делать с объектами Get-Help New-Item - смотрим справку по New-Item, из справки узнаем что команда служит для создания объектов New-Item ".\myfile.txt" -ItemType File - создаем файл myfile.txt в текущем каталоге New-Item "C:\\myfile.txt" -ItemType File - создаем файл myfile.txt в корне диска C: (!!! нужны права на запись, ps должен быть запущен от админа) Get-Command -Noun Content - узнаем о командах Content Get-Help Set-Content - узнаем что команда Set-Content позволяет записать в файл Set-Content [-Path] <System.String[]> [-Value] <System.Object[]> - синтаксис команды Set-Content, требуется -Path путь_к_файлу, и -Value что_нужно_записать_в_файл Set-Content ".\myfile.txt" -Value "Моя первая запись в файл" Get-Content .\myfile.txt - смотрим что в файле Get-Help Add-Content - смотрим что умеет делать Add-Content, читаем умеет добавлять запись в объект Add-Content ".\myfile.txt" -Value "Моя вторая запись" Get-Content .\myfile.txt - читаем файл Get-Command -Noun ItemProperty - смотрим что такое ItemProperty и какие команды доступны Get-Help Get-ItemProperty - узнаем подробнее про команду Get-ItemProperty, команда позволяет посмотреть свойства объекта Get-ItemProperty .\myfile.txt - посмотреть свойства объекта myfile.txt Get-ChildItem Power: - посмотреть содержимое объекта Power: (где-то выше монтировали куст реестра) New-Item Power:\Test1 -ItemType "Folder" - создадим папку Power:\Test1 New-item Power:\Test1\Test2 -ItemType "Folder" - создадим папку Power:\Test1\Test2 dir Power: - посмотреть содержимое объекта Power: Get-Help New-Item -Online - посмотрим онлайн справку по New-Item dir "c:\" | Get-Member - смотрим структуру объектов в c:\ dir "Power:\" | Get-Member - смотрим структуру объектов в Power:\ Get-Help New-PSDrive -Examples New-PSDrive -Name "P" -Root \\www\img\c -PSProvider "FileSystem" - примонтировать сетевой диск \\www\img\c использовать букву "P" для точки монтирования Get-PSDrive - посмотреть что мы там примонтировали Remove-PSDrive "P" New-PSDrive -Name "zabir" -Root \\www\img\c -PSProvider "FileSystem" - небольшой прикол :) Get-PSDrive - посмотреть что мы там примонтировали dir zabir:\ Remove-PSDrive "zabir" |
Простые операции в конвейере
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
Get-Command -Noun Object - посмотреть доступные команды для работы с объектами Select-Object -Property -Descending Sort-Object -Property @{n="...", e={...}} -First -Last -Skip Where-Object -EQ, -NE, -GT, -Like... -FilterScript {...} Group-Object -Property Measure-Object ForEach-Object -MemberName Compare-Object -Property - этот параметр применяется по умолчанию. dir C:\Windows - посмотрим содержимое каталога windows dir C:\Windows | Get-Member - посмотрим доступные свойства, методы и т.д. dir C:\Windows\ | Sort-Object Length - сортируем объекты (по умолчанию сортировка по возрастанию) dir C:\Windows\ | Sort-Object Length -Descending - сортируем объекты по убыванию New-Item zxc1.txt -ItemType File - создадим файл zxc1.txt в текущем каталоге New-Item zxc2.txt -ItemType File - создадим файл zxc2.txt в текущем каталоге New-Item zxc10.txt -ItemType File - создадим файл zxc10.txt в текущем каталоге dir . | Sort-Object Length - попробуем отсортировать файлы по размеру dir . | Sort-Object -Property Length, Name - сортируем объекты по размеру и имени dir C:\Windows | Get-Member -MemberType Properties - посмотреть какие есть параметры для дальнейшей обработки Select-Object - команда Select-Object позволяет делать выборку объектов, сверху, снизу, показывать нужное dir C:\Windows | Select-Object -Property FullName, Extension Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 | Select-Object Handles, Name, VM, CPU $PSItem - текущий элемент списка @{n="Size in KB"; e={$PSItem.Length}} - создание своего свойства @{n="Size in KB"; e={$_.Length / 1024}} - выполняем действие со свойством $_.Length / 1024 dir C:\Windows | Select-Object -Property FullName, Length, @{n="Size in KB"; e={$PSItem.Length}} - пример использования своего свойства dir C:\Windows | Select-Object -Property FullName, Length, @{n="Size in KB"; e={$_.Length}} - пример использования своего свойства dir C:\Windows | Select-Object -Property FullName, Length, @{n="Size in KB"; e={$_.Length / 1024}} | Sort-Object -Property "Size in KB" -Descending - пример использования своего свойства dir C:\Windows | Select-Object -Property FullName, Length, @{n="Size in KB"; e={$_.Length / 1024}} | Sort-Object -Property "Size in KB" -Descending | Select-Object -First 10 Get-Help Where-Object -Examples - получили справку по команде Where-Object dir c:\windows | Where-Object Length -GT 100000 - показать файлы больше 100000 dir C:\Windows | Where-Object Extension -EQ ".EXE" - показать файлы с расширением EXE dir C:\Windows | Where-Object Extension -CEQ ".exe" - показать файлы с расширением exe, CEQ говорит о том что ищем exe с соблюдением регистра Get-Process | Where-Object Name -EQ "Chrome" - показать все процессы с именем Chrome dir C:\Windows | Where-Object Name -Like "e*" - показать файл который начинается на букву "e" в каталоге C:\Windows dir C:\Windows | Where-Object Name -Like "*e" - показать файл который заканчиваются на букву "e" в каталоге C:\Windows dir C:\Windows | Where-Object -FilterScript {$_.Extension -Like ".exe" -and $_.Name -like "h*" -and $_.Length -ge 100000 } - показать файл ".exe", имя начинается на "h", размером больше 100000 dir C:\Windows | Where {$_.Extension -Like ".exe" -and $_.Name -like "h*" -and $_.Length -ge 100000 } - показать файл ".exe", имя начинается на "h", размером больше 100000 Get-Process | sort CPU -Descending | select Name, CPU, VM , Path | Where-Object Name -Like "chrome" - показать отсортированные процессы с именем "chrome" dir C:\Windows | Where-Object Extension -Like ".exe" | Measure-Object -Property Length -Sum - показать какой размер у объектов exe dir C:\Windows | Where-Object Extension -Like ".exe" | Measure-Object -Property Length -Sum -Maximum -Minimum -Average - показать какой размер у объектов exe, минимальные и максимальные размеры объектов Get-Process | sort CPU -Descending | select Name, CPU, VM , Path | Where-Object Name -Like "chrome" | Measure-Object -Property CPU -SUM - посчитать какое потребление CPU у процессов с именем "chrome" Get-Process | sort CPU -Descending | select Name, CPU, VM , Path | Where-Object Name -Like "chrome" | Measure-Object -Property VM -SUM - посчитать какое потребление VM у процессов с именем "chrome" dir C:\Windows | Group-Object -Property Extension - сгруппировать и показать количество объектов по их расширению, в каталоге C:\Windows dir C:\Windows -Recurse | Group-Object -Property Extension - сгруппировать и показать количество объектов по их расширению, включая вложенные папки Get-Service | group status - сгруппировать и показать статус служб Get-Process -IncludeUserName | Sort-Object cpu -Descending | select Name, cpu, vm, username - показать процессы, отсортировать по CPU, выполнить выборку по: Name, cpu, vm, username Get-Process -IncludeUserName | Sort-Object cpu -Descending | select Name, cpu, vm, username | Group-Object username - показать процессы, отсортировать по CPU, выполнить выборку по "Name, cpu, vm, username", сгруппировать и показать процессы по пользователям. dir C:\Windows\ | Where-Object Length -ge 100 | Group-Object Extension | Where-Object Count -Ge 3 - по итогу покажет группы в которых файлов больше 3 dir C:\Windows | Where-Object Extension -EQ ".log" | Get-Member -MemberType Method - показать какие методы мы можем применить к объектам New-Item test111 -ItemType Directory - создаем директорию test111 в текущем каталоге New-Item .\test111\zxc.txt -ItemType File - создаем файл zxc.txt в каталоге test111 New-Item .\test111\zxc1.txt -ItemType File - создаем файл zxc1.txt в каталоге test111 New-Item .\test111\zxc2.txt -ItemType File - создаем файл zxc2.txt в каталоге test111 dir .\test111 | Where-Object Extension -eq ".txt" | Get-Member - показать какие методы мы можем применить к объектам dir .\test111\zxc.txt | Get-Member - показать какие методы мы можем применить к объектам dir .\test111\zxc.txt | ForEach-Object -MemberName Delete - удалит файл dir .\test111 | Where-Object Extension -EQ ".txt" | ForEach-Object -MemberName Delete - из каталога test111 будут удалены все файл c расширением ".txt" dir .\test111 | Where-Object Extension -EQ ".txt" | ForEach-Object Delete - из каталога test111 будут удалены все файл c расширением ".txt" dir C:\Windows | Where-Object Extension -EQ ".txt" | ForEach-Object {$_.Delete()} - из каталога C:\Windows будут удалены все файл c расширением ".txt" (для вложенных каталогов нужно использовать параметр -Recurse) Remove-Item .\test111 - удалить каталог test111 |
Форматирование результатов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
Get-Command -Verb Format dir c:\windows | Format-Table dir c:\windows | Get-Member dir c:\windows | Format-Table -Property Name, Extension, Length Get-Service | Get-Member Get-Service | FT Name, Status, CanStop, Canshutdown Get-Service | FT Name, Status, CanStop, CanShutdown -AutoSize Get-Service | sort Status | FT Name, Status, CanStop, CanShutdown -AutoSize -GroupBy Status Get-Process | Sort-Object CPU -Descending |FT ProcessName, CPU -AutoSize Get-Process | Sort-Object CPU -Descending | FT CPU, @{n="Name"; e={$_.ProcessName}; align="right"} Get-Service | FT Status, @{n="Name"; e={$_.Name}; align="right"} Get-Service | Format-List -Property Name, Status Get-Service | sort Status| Format-Wide -Property Name -column 5 -GroupBy Status |
Начало и конец конвейера в powershell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
Get-Command -Verb Export Get-Command -Verb Export -Module Microsoft.PowerShell.Utility Get-Command -Verb ConvertTo Get-Command -Verb Out !!! Разница между Export и ConverTo следующая: !!! Export завершает конвейер !!! ConvertTo конвейер не завершает и может передать дальше Get-Service | Out-GridView Get-Process | Out-GridView Get-Service | ConvertTo-Html | Out-File "xxx.html" - получаем список служб, конвертируем в html и сохраняем в файл xxx.html Get-Service | ConvertTo-Html -Title "Список служб" -PreContent "<h1>Мои службы<h1>" | Out-File "xxx.html" - получаем список служб, конвертируем в html и сохраняем в файл xxx.html, украшаем html заголовком и т.д. Get-Service | ConvertTo-Json | Out-File "xxx1.Json" - получаем список служб, конвертируем в Json и сохраняем в файл xxx1.Json Get-Service | Export-Csv "zxc2.csv" - получаем список служб и экспортируем в файл zxc2.csv Get-Content "xxx1.json" | ConvertFrom-Json - читаем файл и передаем его в конвейер Get-Command -Verb Import - получаем документацию по Import |
Передача параметров в powershell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
Классический способ Get-Process -Name *a* - выполняем команду "Get-Process" с параметром "-Name" и значением "*a*" Get-Process | Sort-Object -Property Name - передаем список процессов в "Sort-Object" с параметром "-Property" и значением "Name" () - вход конвейера dir C:\Windows\ | Sort-Object -Property Length -Descending Sort-Object -Property Length -Descending -InputObject (dir c:\windows) Get-Service | Format-Wide Format-Wide -InputObject (Get-Service) Get-Help Get-Service -Full Get-Service -Name *win* "*win*" | Get-Service -ComputerName - в powershell всегда указывает на удаленный ПК (для работы должен быть включен winrm, у пользователя должны быть права Администратора на удаленном ПК) Get-Service -ComputerName pdc | Measure-Object Get-Service -ComputerName ts | Measure-Object Get-Service -ComputerName pdc,ts | Sort-Object MachineName | FT -GroupBy MachineName Get-Service -ComputerName pdc,ts | Sort-Object MachineName | FT -GroupBy MachineName MachineName,Name,Status Get-Service -Name (ByValue, ByPropertyName) - ByValue - string -ComputerName (ByPropertyName) -InputObject (ByValue) - ByValue - service-controller "что то в кавычках" - для powershell это строка |
Переменные
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
Объявление переменной Инициализация переменной Использование переменной Get-Command -Noun Variable - смотрим справка по переменным Clear-Variable Get-Variable New-Variable Remove-Variable Set-Variable New-Variable - объявление переменной Set-Variable - инициализация переменной / задать значение Get-Variable - использование значение переменной Get-Variable - без параметров покажет все доступные переменные Get-Variable -Name PSVersionTable - покажет значение переменной PSVersionTable Переменные могут быть разных типов, содержать разные данные, числа, строки Get-Variable -Name PSVersionTable | Get-Member - посмотреть что можно сделать с переменной PSVersionTable Get-Help New-Variable - показать по команде New-Variable New-Variable -Name Test - создать переменную Test New-Variable -Name Test1 - создать переменную Test1 Get-Variable - показать все переменные, и убедимся что переменная Test и Test1 создались Get-Variable -Name Test - проверим что переменная Test создалась Get-Variable -Name Test1 - проверим что переменная Test1 создалась New-Variable -Name Test2 -Value 2015 - создадим переменную Test2 и зададим для нее значение 2015 (число) Get-Variable - показать все переменные New-Variable -Name Test3 -Value "Superpuper" - создадим переменную Test3 и зададим для нее значение Superpuper (строка) Get-PSDrive - показать точки монтирования dir Env: - показать системные переменные dir Variable: - показать переменны пользователя dir Variable:\Test3 - показать значение переменной Test3 !!! Короткое обращение к переменным осуществляется с помощью символа доллар "$" $Test3 $Test2 $Test1 $Test $PSVersionTable $PSVersionTable | Get-Member - мы увидим что тип данных тут Hashtable (TypeName: System.Collections.Hashtable - сложный) $Test2 | Get-Member - мы увидим что тип данных тут Int32 (TypeName: System.Int32 - числовой) $Test3 | Get-Member - мы увидим что тип данных тут String (TypeName: System.String - строка) !!! Для использования метода в конце метода обязательно должны быть скобки"()" Пример: $переменная.GetType() !!! Для использования свойства скобок нет. Пример: $переменная.Length $Test2.GetType() - посмотреть тип используя метод (Int32) $Test3.GetType() - посмотреть тип используя метод (String) $Test3.Length - посмотреть свойство Length переменной $Test3, получим количество символов в строке $Test3.Substring(2, 7) - применить метод Substring(), обрезать значение переменной первые два символа и начиная с 7 символа получим $Test3.Substring(0, 7) - применить метод Substring(), обрезать значение переменной начиная с 7 символа $Test3.Substring(3) - применить метод Substring(), обрезать значение переменной первые три символа $Test4 = 100 - простое объявление переменной, задали значение равное 100 $Test4.GetType() - посмотреть тип используя метод, Int32 $Test4 = 100.25 - простое объявление переменной, задали значение равное 100.25 $Test4.GetType() - посмотреть тип используя метод, стало Double $Test4 = "xxx xxx xxx xxxx xxx" - простое объявление переменной, задали значение равное строке "xxx xxx xxx xxxx xxx" $Test4.GetType() - посмотреть тип используя метод, стало String Get-PSDrive - показать точки монтирования dir Variable:\Test? - показать значение переменной Test? Test1,Test2, Test3... [int]$Test5 = 100 - объявление переменной, тип данных int, значение 100 $Test5 - посмотрели значение переменной, равно 100 $Test5.GetType() - посмотреть тип используя метод, тип данных int $Test5 = 100.25 - команда выполнится, но запишется значение равное 100, так как ранее тип данных был объявлен ([int]$Test5) $Test5.GetType() - убедимся что тип данных не изменился $Test5 = "eewewew-123" - команда не выполнится и вернет ошибку, так как ранее тип данных был объявлен ([int]$Test5) $Test5 = "11213" - попробуем задать вот такую строку состоящею из цифр, powershell увидел что в строке цифры и добавил значение переменной $Test5.GetType() - убедимся что тип данных не изменился Использование переменных [int]$Test6 = 3 - объявили переменную $Test6, тип данных int, значение переменной равно 3 $Test6 = убедились что значение переменной Test6 равно 3 dir C:\Windows | Select-Object -First 3 - посмотрим в каталоге первые три файла dir C:\Windows | Select-Object -First $Test6 - посмотрим в каталоге первые файлы используя переменную $Test6 $Test6 = 15 - переназначили значение переменной Test6 dir C:\Windows | Select-Object -First $Test6 - посмотрим в каталоге первые файлы используя переменную $Test6 Пример скрипта поиска большого файла по размеру и подсчета количества символов в нем [string]$test8 = dir C:\Windows | Where-Object -FilterScript {$_.Extension -Like ".exe" -and $_.Name -like "h*" -and $_.Length -ge 100000 } | select -Property Name $Test9 = $test8.Substring(7) $Test10 = $test9.TrimEnd(".exe}") $Test10.Length Пример в одну строку dir C:\Windows | Where-Object -FilterScript {$_.Extension -Like ".exe" -and $_.Name -like "h*" -and $_.Length -ge 100000 } | select -Property Name | foreach {($_.Name.TrimEnd(".exe")).Length} |
Массивы \ Словари
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
$Test7 = 10, 20, 30, 40, 50 - создать массив dir Variable:\test? - посмотреть значение массива $Test7[0] - показать первое значение массива $Test7[2] - показать третье значение массива $Test7[$Test7.Count -1] - показать последнее значение массива $Test7[-1] - показать последнее значение массива $Test7.Count - показать количество значений в массиве $Test7[2].GetType() $Test7.GetType() $srvlist = Get-Service - создать массив вывода команды Get-Servivce $srvlist - показать все значение массива $srvlist[0] - показать первое значение массива $srvlist[4] - показать пятое значение массива $srvlist[10] - показать десятое значение массива $srvlist[10].Status - посмотреть свойства Status значение [10] массива $srvlist[10].Status.ToString().Length - посмотреть свойство Status,применить метод ToString() - превратить вывод в строку, посмотреть свойство - количество символов $srvlist[10].Name.ToString().Length - посмотреть свойство Name, применить метод ToString() - превратить вывод в строку, посмотреть свойство - количество символов $ldw = dir C:\Windows - создать массив команды dir C:\Windows $ldw - посмотреть содержимое массива $ldw[7].BaseName.ToString() $ldw[7].BaseName.ToString().Length $MyFolder = "C:" $MyFiles = Dir $MyFolder $MyFiles.Count |
Программные конструкции \ Программирование Powershell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
Программирование: 1. Переменные + массивы 2. Циклы while do ... while do ... until for 4. Переборы ForEach 5. Условие if if ... else if ... ifelse ... else Пример цикла while [int]$Index = 8 while ($Index -GT 0) # Условие продолжения цикла { $Index; # Полезная нагрузка в цикле $Index = $Index -1; } Пример цикла do while [int]$Index = 8 Do { $Index; # Полезная нагрузка в цикле $Index = $Index -1; } while ($Index -GT 0) # Условие продолжения цикла Пример цикла do Until [int]$Index = 8 Do { $Index; # Полезная нагрузка в цикле $Index = $Index -1; } Until ($Index -GT 0) # Условие окончания цикла Пример цикла For cls For ( [int]$Index = 8; # Выполняется один раз при входе в цикл $Index -GT 0; # Условие продолжения цикла $Index = $Index -1 # Выполняется после каждого повторения ) { $Index # Полезная нагрузка } Пример цикла For cls [int]$Index = 8 For ( [int]$ForIndex = $Index; # Выполняется один раз при входе в цикл $ForIndex -GT 0; # Условие продолжения цикла $ForIndex = $ForIndex -1 # Выполняется после каждого повторения ) { $ForIndex # Полезная нагрузка } Цикл For, пример бреда, введение в переборы cls $srvl = Get-Service for ( [int]$i = 0; $i -LT $srvl.Count; $i = $i + 1 ) { $srvl[$i].Name } Перебор ForEach cls $srv = Get-Service ForEach ($s in $srv) { $s.Name } Цикл IF cls [int]$Test9 =5 $Test9 if ($Test9 -GT 3) { Write-Host "Больше трех" } Цикл IF ELSE cls [int]$Test9 =2 $Test9 if ($Test9 -GT 3) { Write-Host "Больше трех" } else { Write-Host "Не больше трех" } Цикл IF ELSEIF ELSE cls [int]$Test9 = Get-Random -Maximum 5 -Minimum -5 $Test9 if ($Test9 -GT 4) { Write-Host "число больше 4" } elseif ($Test9 -GT 3) { Write-Host "число больше 3" } elseif ($Test9 -GT 0) { Write-Host "больше 0" } else { Write-Host "число отрицательное" } Пример цикла cls #Показать название каталога в корневой папке диска c:, в котором больше всего вложенных каталогов. $Rootc = dir "c:\" -directory # Это массив папок верхнего уровня. Будем их перебирать $MaxCount = 0 #Тут будем запоминать максимальное найденное число $FName = "" # Тут будем запоминать название папки с максимальным числом подкаталогов foreach ($F in $Rootc) # Перебираем все каталоги верхнего уровня { $SubF = Dir -Directory $F.FullName # Получаем список вложенных папок if ($SubF.count -gt $MaxCount) # Сравниваем число подпапок в текущем каталоге с папкой-лидером { # Если найден новый лидер, запоминаем его $MaxCount = $SubF.count; # Число подкаталогов у нового лидера $MaxName = $F.FullName # Имя лидера } } $MaxName # После перебора всех папок показываем лидера |
Сценарии \ запуск сценариев \ настройка политики запуска
|
*.PS1 - расширение скриптов powershell Get-Command -Noun ExecutionPolicy - смотри на доступные команды управления безопасностью выполнения powershell скриптов Get-ExecutionPolicy - показать политику запуска powershell скриптов Возможны следующие значения: "Unrestricted, RemoteSigned, AllSigned, Restricted, Default, Bypass, Undefined". Restricted - включена по умолчанию, запуск сценариев запрещен Unrestricted - разрешен запуск всех сценариев Get-ExecutionPolicy -List - показать все доступные политики Set-ExecutionPolicy - изменить настройки политики Set-ExecutionPolicy Unrestricted - разрешить запуск всех сценариев Set-ExecutionPolicy Restricted - запретить запуск всех сценариев |
Пример сценария
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
$RootFolderDir = "c:\" # В этой папке будем искать cls #Показать название каталога в корневой папке диска c:, в котором больше всего вложенных каталогов. $Rootc = dir $RootFolderDir -directory # Это массив папок верхнего уровня. Будем их перебирать $MaxCount = 0 #Тут будем запоминать максимальное найденное число $FName = "" # Тут будем запоминать название папки с максимальным числом подкаталогов foreach ($F in $Rootc) # Перебираем все каталоги верхнего уровня { $SubF = Dir -Directory $F.FullName # Получаем список вложенных папок if ($SubF.count -gt $MaxCount) # Сравниваем число подпапок в текущем каталоге с папкой-лидером { # Если найден новый лидер, запоминаем его $MaxCount = $SubF.count; # Число подкаталогов у нового лидера $MaxName = $F.FullName # Имя лидера } } $MaxName # После перебора всех папок показываем лидера |
Сценарии \ параметры сценариев
|
Параметры в сценарии задаются функцией param() Используются параметры вот так: .\myscript.ps1 "c:\" .\myscript.ps1 -RootFolderDir "c:\" .\myscript.ps1 -RootFolderDir "c:\Program*" .\myscript.ps1 -RootFolderDir "c:\" -Ext "exe" .\myscript.ps1 -RootFolderDir "c:\Windows" -Ext "exe" .\myscript.ps1 -RootFolderDir "c:\Windows" -Ext "log" .\myscript.ps1 -RootFolderDir "c:\Windows" -Ext "dll" .\myscript.ps1 -RootFolderDir "c:\Windows" -Ext "txt" |
Пример сценария с простыми параметрами параметрами:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
param( [string]$RootFolderDir, [string]$Ext ) #$RootFolderDir = "c:\" # В этой папке будем искать # перенесли в параметр #Показать название каталога папке $RootFolderDir, в котором больше всего файлов с расширение $Ext $Rootc = dir $RootFolderDir -directory # Это массив папок верхнего уровня. Будем их перебирать $MaxCount = 0 #Тут будем запоминать максимальное найденное число $FName = "" # Тут будем запоминать название папки с максимальным числом подкаталогов foreach ($F in $Rootc) # Перебираем все каталоги верхнего уровня { $SubF = Dir -Directory ($F.FullName + "\*." + $Ext) # Получаем список вложенных файлов if ($SubF.count -gt $MaxCount) # Сравниваем число подпапок в текущем каталоге с папкой-лидером { # Если найден новый лидер, запоминаем его $MaxCount = $SubF.count; # Число подкаталогов у нового лидера $MaxName = $F.FullName # Имя лидера } } $MaxName # После перебора всех папок показываем лидера |
Пример сценария со сложными параметрами:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
[CmdletBinding()] # Включение режима сложных параметров param( [Parameter(Mandatory=$true)] # действует для одного следующего параметра #Mandatory - обязательный параметр или нет [string]$RootFolderDir, [string]$Ext = "*" # задали значение по умолчанию # значения по умолчанию можно задать и в простом сценарии ) Write-Host ("Каталог: " + $RootFolderDir) Write-Host ("Расширение: " + $Ext) #Показать название каталога папке $RootFolderDir, в котором больше всего файлов с расширение $Ext $Rootc = dir $RootFolderDir -directory # Это массив папок верхнего уровня. Будем их перебирать $MaxCount = 0 #Тут будем запоминать максимальное найденное число $FName = "" # Тут будем запоминать название папки с максимальным числом подкаталогов foreach ($F in $Rootc) # Перебираем все каталоги верхнего уровня { $SubF = Dir -Directory ($F.FullName + "\*." + $Ext) # Получаем список вложенных файлов if ($SubF.count -gt $MaxCount) # Сравниваем число подпапок в текущем каталоге с папкой-лидером { # Если найден новый лидер, запоминаем его $MaxCount = $SubF.count; # Число подкаталогов у нового лидера $MaxName = $F.FullName # Имя лидера } } Write-host ("Результат: " + $MaxName) # После перебора всех папок показываем лидера |
Пример сценария с параметрами
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
#Сценарий с параметрами, показывающий список процессов #1. Строка - фильтр для процессов #2. Число - фильтр для процессов #3. Строка - управляет сортировкой #4. Строка - управляет форматирование результата [CmdletBinding()] param( [Parameter(Mandatory=$true)] [string]$ProcessNamez, [Parameter(Mandatory=$true)] [int]$ColProcess, [Parameter(Mandatory=$true)] [string]$SortProcess , [Parameter(Mandatory=$true)] $FormatT ) if ($ProcessName -EQ 0) { $ProcessNamez = "svc*" } elseif ($ProcessNamez -EQ 1) { $ProcessNamez = "chr*" } else { $ProcessNamez = "idle*" } if ( $SortProcess -EQ 0) { $SortProcess = "CPU*" } elseif ($ProcessName -EQ 1) { $SortProcess = "WS*" } else { $SortProcess = "ID" } if ( $FormatT -EQ 0) { $FormatT = "ID" } else { $FormatT = "ProcessName" } Get-Process -Name $ProcessNamez | Select-Object -First $ColProcess | Sort-Object $SortProcess | Format-Table $FormatT Write-Host "$ProcessNamez" Write-Host "$ColProcess" Write-Host "$SortProcess" Write-host "$FormatT" |
Сценарий, используем перебор ForEach, для создания объектов
|
param ( [string]$FRoot = ".", #Где создаем папки [string]$FNEw = "zxc" #Имя папки ) # Для заданной папки создать в каждой из ее подпапок вложенную папку с названием "zxc" $Dir = Dir $FRoot -Directory ForEach($F in $Dir) { New-Item -name $FNEw -ItemType Directory -Path $F.FullName } |
Конвейер, используем перебор ForEach с методом CreateSubdirectory, для создания объектов
|
param ( [string]$FRoot = ".", #Где создаем папки [string]$FNEw = "zxc" #Имя папки ) # Для заданной папки создать в каждой из ее подпапок вложенную папку с названием "zxc" Dir $FRoot -Directory | ForEach-Object CreateSubdirectory $FNEw |
Обработка ошибок в powershell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
Обработка ошибок: on error resume next v------------------- if (... <> 0) v------------------- if (...) v------------------- if (...) v------------------- Обработка исключений: Try { Код } Catch { #обработака ошибок } |
Обработка ошибок, пример сценария с обработкой ошибок:
|
[int]$A = 0 Try { $A + 1 $A * 2 10 /$A $A - 1 Write-Host "Ошибок не было" } Catch { Write-Host "Случилась ошибка!" } |
Обработка ошибок, Write сообщения
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Get-Command -Verb write - подробная информация по глаголу write Write-FileSystemCache Write-DtcTransactionsTraceSession Write-PrinterNfcTag Write-VolumeCache Write-Debug Write-DfsrHealthReport Write-DfsrPropagationReport Write-Error Write-EventLog Write-Host Write-Information Write-Output Write-Progress Write-Verbose Write-Warning |
Обработка ошибок, пример использования Write-Verbose, Write-Debug
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
#s3.ps1 -A 1 -B 2 -Verbose #s3.ps1 -A 1 -B 2 -Verbose -Debug #.\s3.ps1 -A 2 -B 3 -Verbose #.\s3.ps1 -A 2 -B 3 -C -Verbose [CmdletBinding()] # Оснащает сценарий дополнительными функциями как Verbose и Debug Param ( [int]$A, [int]$B, [switch]$C # Параметр в виде ключей, ключ без значения ) cls #Write-Host ("Параметр A=" + $A) #Write-Host ("Параметр B=" + $B) Write-Verbose ("Параметр A=" + $A) $A | Get-Member | Write-Debug Write-Verbose ("Параметр B=" + $B) $B | Get-Member | Write-Debug Write-Verbose ("Параметр C=" + $C) #$C | Get-Member | Write-Debug |
Обработка ошибок, пример использования «Switch» в сценарии
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
# pingovator [CmdletBinding()] Param ( [switch]$A, [switch]$B, [switch]$C ) $ip_list = @('192.168.15.1', '192.168.15.10', '192.168.15.254') #$ip_list = "192.168.15.1", "192.168.15.10", "192.168.15.254" Try { if ([switch]$A) { # Выполняется если A = True Write-Host ($ip_list[0]) #ping ($ip_list[0]) Test-Connection ($ip_list[0]) Write-Host "Ошибок не было!" } elseif ([switch]$B) { # Выполняется если B = True Write-Host ($ip_list[1]) Test-Connection ($ip_list[1]) Write-Host "Ошибок не было!" } elseif ([switch]$C) { # Выполняется если C = True Write-Host ($ip_list[2]) Test-Connection ($ip_list[2]) Write-Host "Ошибок не было!" } else { Write-Host "Параметры не указаны" Write-Host ("Параметр A = " + $A) Write-Host ("Параметр B = " + $B) Write-Host ("Параметр C = " + $C) } #EndTry } Catch { Write-Host "О Ужас у нас ошибки" } |
Обработка ошибок, встроенная переменная $Error
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
#cls [int]$A = 0 Try { $A + 1 $A * 2 10 / $A $A - 1 Write-Host "Ошибок не было" } Catch { # Write-Host "Случилась ошибка!" # Write-Error "Случилась ошибка!" Write-Warning "Случилась ошибка!" #$Error | GM #$Error.ErrorDetails #$Error.CategoryInfo } |
Удаленное управление \ удаленное исполнение команд
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
Подготовка компьютера к удаленному управлению. winrm QuickConfig - подготовка компьютера к удаленному управлению. Enable-PSRemoting -Force - подготовка компьютера к удаленному управлению. 0. запустится служба WinRM (если запущена перезапустится) 1. служба WinRM перейдет в состояние — автоматический запуск при старте 2. будет создано правило в firewall для WinRM для HTTP трафика на порту 5985 для всех локальных IP адресов Удаленное управление варианты 1. -ComputerName - специальный параметр для исполнения команд на удаленном ПК 2. PSsession - удаленное управление на основе PSSesion, подходит для подключения к одному пк 3. Invoke-Command - специальная команда для выполнения команд на большом кол-ве компьютеров winrs –r:computer01 cmd - удаленное управление computer01 с помощью WinRS / оболочка cmd winrs -r:win10-test1 powershell - удаленное управление win10-test1 с помощью WinRS / оболочка powershell Как пользоваться -ComputerName: Get-Service -ComputerName win10-test1 - используя параметр -ComputerName получаем информацию о сервисах с компьютера win10-test1 Использование PSSession Enter-PSSession win10-test1 - подключаемся к удаленному ПК Exit-PSSession - завершить удаленную сессию Get-Command -Noun PSSession - список всех возможных команд с использованием PSSession Использование Invoke-Command Invoke-Command pdc1, win10-test1, win10-test2 -ScriptBlock {Get-Service; Get-Process} Invoke-Command win10-test1 -ScriptBlock {Get-Process} Invoke-Command win10-test1,ts,pdc -ScriptBlock {dir c:\} Invoke-Command win10-test1,ts,pdc -ScriptBlock {dir c:\ |Measure-Object} |
Фоновое исполнение команд
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
Get-Command -Noun Job - получаем информацию по командам Job Get-Job - получить список заданий Receive-Job - это команда поможет узнать результат выполнения задания Remove-Job - удалить задание Resume-Job - возобновить выполнение задания Start-Job - запуск задания Stop-Job - остановка задания Suspend-Job - поставить задание на паузу Wait-Job - притормозить задание Start-Job {dir c:\ -Recurse | Measure-Object} Start-Job -ScriptBlock {dir c:\ -Recurse | Measure-Object} Start-Job {Get-Service} Get-Job - показать все задания, заодно ид заданий Receive-Job 1 - посмотреть результат выполнения задания c id 1 Receive-Job 3 - посмотреть результат выполнения задания c id 3 Пример использования задания: Start-Job {Get-Service} - создали задание Get-Job - получить список заданий $srv = Receive-Job -id 5 - сохранили результат выполнения в переменную $srv | Select-Object -Property Status, Name | Sort-Object status - выполнили полезную работу с переменной |
Планировщик в powershell \ назначенные задания
|
Get-Command -Noun *Job Get-Command -Noun ScheduledJob taskschd.msc Get-Help Set-ScheduledJob Get-Help Set-ScheduledJob -Examples Get-Help Set-ScheduledJob -online |
Модули / подготовка
|
0. Создадим файл script1.ps1: [CmdletBinding()] Param( [Parameter(Mandatory=$True)] [string]$Filename ) Get-Content -Path $Filename 2. Создадим файл zxc.txt и добавим в него контент "Hello man": New-Item zxc.txt -Type File Set-Content "Hello man" -Path .\zxc.txt 3. Проверим работу скрипта из пункта 0 .\script1.ps1 -Filename .\zxc.txt |
Модули / создание функции
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Редактируем скрипт script1.ps1 Функцию можно назвать как угодно, но лучше придерживается общепринятому в powershell синтаксису Глагол-Существительное. В нашем случае назовём ее Get-MyInfo Function Get-MyInfo { [CmdletBinding()] Param( [Parameter(Mandatory=$True)] [string]$Filename ) Get-Content -Path $Filename } ###### вызов функции (все еще редактируем файл script1.ps1) Get-MyInfo -Filename .\zxc.txt |
Модули / добавляем еще функций
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
Function Get-MyInfo { [CmdletBinding()] Param( [Parameter(Mandatory=$True)] [string]$Filename ) Get-Content -Path $Filename } Function Set-MyInfo { [CmdletBinding()] Param( [Parameter(Mandatory=$True)] [string]$Filename, [Parameter(Mandatory=$True)] [string]$MyText ) Set-Content $MyText -Path $Filename #$MyText | Out-File -FilePath $Filename } Function Clear-MyInfo { [CmdletBinding()] Param( [Parameter(Mandatory=$True)] [string]$Filename ) Remove-Item -Path $Filename } # Используем функции Set-MyInfo -Filename .\zxc.txt -MyText "Halololo lalalala lolo" # создаем файл и записываем текст Get-MyInfo -Filename .\zxc.txt # Читаем файл Clear-MyInfo -Filename .\zxc.txt # Удаляем файл |
Модули / Сохранение и создание своего модуля
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
0. Файлы модулей имеют расширение *.psm1 1. Директория модулей для пользователя по умолчанию: C:\Users\NAME_USER\Documents\WindowsPowerShell\Modules 2. !!! У модуля должна быть своя директория. !!! Модуль и директория имеют одинаковое имя. Пример: C:\Users\NAME_USER\Documents\WindowsPowerShell\Modules\NAMEMODULE_FOLDER\NAMEMODULE.psm1 C:\Users\user\Documents\WindowsPowerShell\Modules\script1\script1.psm1 3. Директория модулей для системы по умолчанию: C:\Program Files\WindowsPowerShell\Modules C:\Windows\system32\WindowsPowerShell\v1.0\Modules C:\Program Files\Microsoft Message Analyzer\PowerShell\ 4. Посмотреть все директории где могут быть модули: dir Env:\PS* | FL 5. Показать все доступные модули в powershell: Get-Module -ListAvailable 6. Посмотреть справку по модулю: Get-Command -Module Name_Module Get-Command -Noun Name_Function Get-Command -Module Script* Get-Command -Noun MyInfo |
Модули и справка для функции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
Function NAME-FUNCTION { <# .Synopsis что то здесь .Description что то тут .Parameter Start Описание параметра Start .Parameter End Описание параметра End .Example Пример #> #полезное тело функции } |
wmi \ cim
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
WMI - позволяет получить информацию о железе CIM замена WMI Get-Command -Noun WmiObject Get-Command -Noun Wmi* Get-Command -Noun CimInstance Get-Command -Noun Cim* Get-CimInstance 'Win32_Bios' | Select-Object SerialNumber - получить серийный номер ПК (работает на брендовых устройствах) Get-WmiObject win32_computersystem | Select-Object SystemSKUNumber - получить серийный номер ПК (работает на брендовых устройствах) Get-WmiObject Win32_Bios - показать версию Bios Get-WmiObject Win32_BaseBoard - показать материнскую плату Get-WmiObject Win32_IDEcontroler - показать контролер дисков Get-WmiObject win32_PhysicalMemory - показать информацию об оперативке RAM Get-WmiObject Win32_Processor - информация о процессоре CPU Get-WmiObject Win32_USBController - показать информацию об USB Get-WmiObject Win32_USBControllerDevice - показать информацию об USB Get-WmiObject Win32_USBHub - показать информацию об USB Get-WmiObject Win32_DiskDrive - показать информацию о дисках Get-WmiObject Win32_Printer - показать информацию о принтерах Get-WmiObject Win32_DesktopMonitor - показать информацию о мониторе по умолчанию Get-WmiObject Win32_VideoController - показать информацию о видеокарте GPU Get-WmiObject Win32_NetworkAdapter - показать информацию о сетевых картах NET !!! При использовании Get-CimInstance отлично работает автодобавление (клавиша TAB) Get-Help Get-CimInstance -Examples Get-CimInstance Win32_BaseBoard - показать материнскую плату Get-CimInstance Win32_Bios - показать версию Bios Get-CimInstance Win32_Processor - информация о процессоре CPU |
AD
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
Стандартные cmd программы для управления AD: dsadd /? - добавить объект dsget /? - посмотреть информацию о объекте dsmod /? - изменить существующий объект dsmove /? - переместить объект dsquery /? - посмотреть объекты, возвращает список dsrm /? - удалить объект CN - объект либо встроенная папка OU - подразделение Пользователь "zxc" находится в OU "home" в домене "domen.inc" Читается с права на лево: CN=zxc,OU=home,DC=domen,DC=inc OU home: OU=home,DC=domen,DC=inc Используем powershell: Update-Help - обновляем справку Get-Command -Module ActiveDirectory - показать доступные команды для работы с ActiveDirectory help New-ADUser -Examples - смотрим справку по New-ADUser Import-Module ActiveDirectory - импортируем модуль ActiveDirectory (решает проблему с powershell, доступ к точке монтирования AD) Get-PSProvider - показать доступные провайдеры (провайдер ActiveDirectory должен быть в списке, если его нет то следует выполнить Import-Module ActiveDirectory) Get-PSDrive - показать точки монтирования (точка монтирования "AD ... //RootDSE/" должна быть в списке, если её нет то следует выполнить Import-Module ActiveDirectory) dir AD: cd AD: cd "DC=vazaraz,DC=inc" перейти в домен "vazaraz.inc" cd "OU=vazaraz-pc" - перейти OU "vazaraz-pc" dir -Recurse - показать все вложенные объекты Get-ADUser "CN=vasya,OU=manager,DC=vazaraz,DC=inc" - показать информацию о пользователе vasya, в домене "azaraz.inc", каталог OU "manager" dir -Recurse | Sort-Object -Property objectclass | Where-Object -Property ObjectClass -eq "user" - показать всех пользователей dir -Recurse | Sort-Object -Property objectclass | Where-Object -Property ObjectClass -eq "computer" - показать все компьютеры dir -Recurse | Sort-Object -Property objectclass | Where-Object -Property ObjectClass -eq "group" - показать все группы Get-Item "CN=WIN10-TEST0" Get-Item "CN=wds" Get-Item "CN=wds" | Get-Member dir | Select-Object name, objectGuid New-ADOrganizationalUnit LOLOLOLO - создать OU с именем "LOLOLOLO" |