# Переменные
$work_dir="C:\Users\user\Desktop\super_folder\"
$backup_dir="D:\backup_superfolder\"
$remote_dir="\\tsclient\Documents\"
$data_time=$(Get-Date -Format yyyyMMdd_Hm_s)
$name_zip_file="super_folder"
# Архивируем каталог из $work_dir в $backup_dir
Compress-Archive -Path "${work_dir}" -DestinationPath "${backup_dir}${name_zip_file}.${data_time}.zip"
# Если каталог есть производим синхронизацию
# Использую стороннею программу FreeFileSync для синхронизации
if(test-path ${remote_dir})
{
echo "Отлично каталог ${remote_dir} есть"
echo "Производим синхронизацию"
C:\Users\user\script_folder\BatchRun.ffs_batch
}
Рубрика: Powershell
Конспект: powershell
Вводное:
powershell = командная оболочка, язык сценариев 1. Глагол - существительное (действие) - (объект) 2. Все время работаем с объектами
Начало работы:
Клавиша "TAB" авто дополнение ввода команд. Get-Service - показать службы Get-Process - показать процессы history - показать историю команд
Начало работы со справкой:
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 в текущем каталоге
Конвейер:
!!! В 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
Абстракция файловой системы
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][-PSProvider] [-Root] - синтаксис из 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] [-Value] - синтаксис команды 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"
Простые операции в конвейере
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
Форматирование результатов
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
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 "Мои службы
" | 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
Классический способ
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 это строка
Переменные
Объявление переменной
Инициализация переменной
Использование переменной
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}
Массивы \ Словари
$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. Циклы
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 - запретить запуск всех сценариев
Пример сценария
$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"
Пример сценария с простыми параметрами параметрами:
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 # После перебора всех папок показываем лидера
Пример сценария со сложными параметрами:
[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. Строка - управляет форматирование результата
[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
Обработка ошибок:
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 сообщения
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
#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» в сценарии
# 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
#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
}
Удаленное управление \ удаленное исполнение команд
Подготовка компьютера к удаленному управлению.
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}
Фоновое исполнение команд
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
Модули / создание функции
Редактируем скрипт 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
Модули / добавляем еще функций
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 # Удаляем файл
Модули / Сохранение и создание своего модуля
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
Модули и справка для функции:
Function NAME-FUNCTION {
<#
.Synopsis
что то здесь
.Description
что то тут
.Parameter Start
Описание параметра Start
.Parameter End
Описание параметра End
.Example
Пример
#>
#полезное тело функции
}
wmi \ cim
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
Стандартные 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"
Get-NetAdapter -Name "*" | Select-Object -ExpandProperty LinkSpeed
Powershell как работать
0) Нажатие кнопки вверх и вниз позволяет вам прокручивать историю команд,и выбирать ранее набранные команды. 1) Нажатие кнопки вправо, в конце строки, будет посимвольный выбор предыдущей команды. 2) Ctrl+Home — удаляет всё, начиная с текущей позиции курсора до начала строки 3) Ctrl+End — удаляет с курсора и до конца строки 4) F7 — показывает окно со списком набранных команд, и позволяет выбрать одну из них. 5) Для того, чтобы скопировать что-то в буфер, выделите это мышью и нажмите Enter. 6) Для того, чтобы вставить строку из буфера — просто нажмите правую кнопку мыши. 7) Клавиша TAB - Авто подстановка команд/Путей (TAB поможет меньше ошибется) 8) %windir%\system32\WindowsPowerShell\v1.0\PowerShell_ISE.exe - GUI Powershell 9) поиск ISE - GUI Powershell 10) sconfig.cmd - стандартная оболочка в которой можно поменять Время, Дату, Имя пк, и тд. 11) * - любой символ в любом кол-ве 12) $ - назначение переменной !!!) Синтаксис команд в powershell примерно такой: хочу-получить | действие update-help get-Process set-alias Get-Process *name* - показать-процесс с именем *name* Get-Process *name* | Get-Member - показать что можно сделать с процессом Get-Process *name* | kill - показать-процесс с именем *name* и убить его Get-Command -Noun *net* - показать все команды в которых встречается слово *net* Get-Alias - показать все доступные алиасы Get-Process *paint* | Stop-Process - найти все процессы paint и остановить их man Get-NetAdapter - получить помощь по команде Get-NetAdapter Enter-PSSession -ComputerName lon-svrl - подключится к удаленному ПК к консоли powershell (примерно как ssh толбко тут winrm)
powershell_ise.exe - специальная встроенная в windows программа для создания скриптов с описание всех команд Update-Help - обновить справку Get-Help –Examples - получить справку по Get-Help Get-Help -ShowWindow - запрашиваем полную справку Get-Help Get-Help -Full - запрашиваем полную справку Get-Help Get-Help что_это - получить справку по чему-то (или help что_это) get-help New-Item -Examples - получить справку с примерами get-help Registry - получить справку по реестру get-help files - получить справку по файлам Get-Help Registry | Set-Content reg.txt - получить справку по реестру и сохранить ее в файл reg.txt Get-Help command_name - получить справку по определенной команде Get-Help Get-* - получить справку используя маску Get-* Get-Help about* - для просмотра алфавитного списка, содержащих обзоры различных концепций Get-Help about_flow_control - справка для считывания файла об управлении потоками данных Get-Help Get-Process –Examples - получить справку по запрашиваемой функции или командлету с примерами его использования Get-Help Get-Process -ShowWindow - запрашиваем полную справку по команде Get-Help Get-Process -Full - запрашиваем полную справку по команде Get-Help Get-Process -Detailed - выводим описание команды и примеры использования Get-Help Dir -full | more - выводить на экран информацию по мере необходимости Get-Help Dir -full > dir-help.txt - сохранить информацию о команде в файл dir-help.txt Get-Command - запрос списка доступных команд Get-Command Out* - запрос списка доступных команд Out* Get-Command Add* - запрос списка доступных команд Add* Get-Command Get* - запрос списка доступных команд Get* Get-Command -CommandType alias - запрос списка всех доступных алиасов Get-Command *help* -CommandType cmdlet - запросить только список командлетов по маске *help* help about_signing - все про подписание скриптов
Powershell алиасы
Алиасы:
Можно применять большинство старых команд windows(cd dir find findstr copy ) и использовать команды unix (cd ls ps cp ..... ) Set-Alias - создать новый алиас Get-Alias - покажет все доступные алиасы ls Alias:\ - покажет все доступные алиасы
Примеры:
Очень много команд из linux. ls, ps, cat, и тд Get-Alias - покажет все доступные алиасы Get-Help ps - получить помощь по команде ps
Введение:
!!! О переменных окружение не в powershell !!! Переменные среды бывают двух типов — системные и локальные. %SYSTEMROOT% - системная переменная. указывает в какой папке установлена Window %userprofile% - локальные переменная. указывает где профиль пользователя echo %SYSTEMROOT% - покажет переменную echo %USERPROFILE% - покажет переменную echo %USERNAME% - покажет переменную set - покажет все установленные переменные
Работа:
!!!В PowerShell переменные окружения вынесены на специальный диск Env:
cd env: - перейти на диск с переменными окружениями
dir - показать переменные окружения (сработает после перехода на диск)
Get-ChildItem Env: - показать переменные окружения
$env:{имя переменной} - вывести значение переменной
$env:temp - вывести значение переменной %TEMP%
${env:CommonProgramFiles(x86)} - вывести значение переменной
${env:ProgramFiles(x86)} - вывести значение переменной
$env:TestVar = "This is a test environment variable." - создание собственных переменных окружения
new-item -path Env: -name TestVa -value "This is a test environment variable." - создание собственных переменных окружения
Remove-Item Env:TestVar - удаление переменных окружения
clear-item -path env:TestVar - удаление переменных окружения
Пример скрипта:
Скрипт демонстрирующий работу переменных окружений $computer = $env:computername $user = $env:username cd $env:windir Write-Host "$user, welcome to $computer!"
Powershell управление ОС
Основные команды:
Get-Process - получить список процессов (алиас PS)
Get-PSDrive - покажет все диски системы (реестр алиасы и ...)
ps | ls - покажет откуда запущенны все процессы
ps explorer | ls - покажет откуда запущен процесс explorer
Set-Location HKLM: - перейти в реестр
cd HKLM: - перейти в реестр
Set-Location HKLM:
Set-Location c: - перейти на диск c:
Get-Location - покажет текущие место положение
Get-Member - показать доступные методы
Get-Commnad *name* - показать команду в катрой есть *name*
ps notepad | Get-Member - показать доступные методы для notepad (kill start WaitForExit)
(ps notepad).WaitForExit() - перед этой командой откроем notepad. выполнив ее консоль будет не доступна пока не закроем notepad/
(ps notepad).StartTime - покажет когда был запущен notepad
shutdown /r /f /t 0 - перезагрузить пк
shutdown /s /f /t 0 - выключить пк
shutdown /r /f /m \\HOST_NAME /t 0 - перезагрузить пк с именем HOST_NAME
shutdown /s /f /m \\HOST_NAME /t 0 - выключить пк с именем HOST_NAME
Get-WMIObject -Class Win32_OperatingSystem | Get-Member - источник информации о системе
(Get-WMIObject -Class Win32_OperatingSystem).Caption - название операционной системы
(Get-WMIObject -Class Win32_OperatingSystem).CSDVersion - установленный сервис пак
(Get-WMIObject -Class Win32_OperatingSystem).CSName - имя компьютера
(Get-WMIObject -Class Win32_OperatingSystem).OSLanguage - язык операционной системы 1033 — английский, 1049 — русский
Get-WmiObject -Class Win32_Product | Sort-Object Vendor, Name | Format-Table Vendor, Name, Version - будет таблица содержащая сведения об установленном ПО
Get-WmiObject -Class Win32_Product -ComputerName . —Filter "Name=’DeviceLock’" | Format-List -Property * - информация об установленном ПО с именем DeviceLock
Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName "." - информация об установленных обновлениях
Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName "." | where-object {$_.hotfixid -eq "KB2570791"} - находим установлены ли обновление KB2570791
Get-WmiObject Win32_LogicalDisk -ComputerName SRV01 -Filter "DeviceID='C:'" | Select-Object Size,FreeSpace - сколько свободного места на диске C:
hostname - показать имя компьютера
netdom renamecomputer Win01 /newname:SRV01 - переименовать пк с именем win01 в srv01
netdom join SRV01 /Domain:example.org /OU:ou=ouname,dc=example,dc=org /UserD:DomainAdmin /PasswordD:password - добавить пк с именем srv01 в домен example.org
Rename-Computer –NewName SRV01 - переименовать пк с именем win01 в srv01
Add-Computer -domainname example.org -OUPath "OU=ouname=example,DC=org" - добавить пк с именем srv01 в домен example.org
net use E: \\SRV01\users /Persistent:Yes - монтирование сетевых диска ( шара )
New-PSDrive –Name E –PSProvider FileSystem –Root \\SRV01\users –Persist - монтирование сетевых диска ( шара )
diskpart - работы с дисками
fsutil - работы с дисками
fsutil fsinfo statistics C: - информация о партиции С:
Нахождение установленных обновлений:
$a = get-content servers.txt
$a | foreach { if (!(get—hotfix -id KB2570791 -computername $_)) { add-content $_ -path Missing—KB2570791.txt}}
Нахождение обновлений на множестве компьютеров:
$computers = Get-Content "hostlist.txt"
$kb = "KB2570791"
foreach ($computer in $computers) {
Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName $computer | where {$_.hotfixid -like "*$kb*" -OR $_.description -like "*$kb*" }
}
Установка программы:
(Get-WMIObject -ComputerName "host-01" -List | Where-Object -FilterScript {$_.Name -eq "Win32_Product"}).Install(\\SERVER_NAME\Deploy\Package_01\tools.msi) - установка программы tools.msi на пк host-01
Обновление \ Удаление ПО:
(Get-WmiObject -Class Win32_Product -ComputerName . —Filter Name=‘OldTools’").Upgrade(\\SERVER_NAME\Deploy\Package_01\OldTools.msi) - обновление по (Get-WmiObject -Class Win32_Product —Filter "Name=’Devicelock’" -ComputerName "." ).Uninstall() - удаление по
Powershell службы
Get-Service - получить список всех сервисов/служб
Get-Service -Name se* - получить список всех сервисов начинающихся с SE
Get-Service -Name win* -exclude winrm - запросить все сервисы начинающиеся с WIN но исключить названия соответствующие WINRM
Get-Service -DisplayName "Remote Registry", Server - запросить несколько сервисов
(Get-Service -Name bits).status - информация о службе BITS
Get-Service s* | sort-object status - отсортировать сервисы s* по статусу
Get-Service s* | sort-object status -descending - отсортировать сервисы s* по статусу наоборот
Get-Service -Name LanmanWorkstation —RequiredServices - отображения требуемых служб для LanmanWorkstation
Get-Service -Name LanmanWorkstation —DependentServices - отображения зависимых служб для LanmanWorkstation
Get-Service | Where-Object {$_.status -eq "stopped"} - показать службы в состоянии stopped
Get-Service | Where-Object {$_.status -eq "running"} - показать службы в состоянии running
Get-Service -ComputerName Server01 - запросить список служб с удаленного хоста Server01
Get-Service schedule -ComputerName SRV1, SRV2 | Set-Service -Status paused - поставить сервис schedule на паузу на хостах SRV1 и SRV2
Start-Service -Name spooler - запускаем сервер печати
Start-Service -Name spooler -PassThru - запускаем сервер печати с выводом информации на экран
Stop-Service -Name spooler - Остановить службу сервера печати
Stop-Service -Name spooler -Force - Выключить службу сервера печати (методом выстрела в голову :))
Stop-Service -Name spooler -Force -PassThru - Выключить службу сервера печати (методом выстрела в голову :)) и показать статус выполнения.
Suspend-Service -Name spooler - приостановить работу службы spooler
Get-Service | Where-Object {$_.CanPauseAndContinue} - список служб которые можно остановить
Restart-Service -Name spooler - перезапуск службы spooler
Get-WmiObject -Class Win32_Service | format-table Name, StartMode -autosize - вывести список сервисов и их режимом запуска
Get-WmiObject -Class Win32_Service | Where-Object {$_.StartMode -eq ‘Disabled’} - вывести только отключенные сервисы
Set-Service service_name -StartupType Manual - установить типа запуска сервиса вручную для service_name
Set-Service service_name -StartupType Automatic - установить типа запуска сервиса автоматически для service_name
Set-Service service_name -StartupType Disabled - установить типа запуска сервиса отключено для service_name
Get-Service -name Schedule -computername SRV1, SRV2 | Set-Service -Status paused - на нескольких хостах поставить сервис на паузу
Sc config winrm start= auto - включить автозапуск для сервиса winrm
Net start winrm - запустить сервис winrm
Set-Service -name winrm -status Running -StartupType Automatic - включить авто запуск сервиса winrm и запустить.
Powershell файлы и папки
Основные команды для работы с файлами:
Get-PSDrive - покажет все диски системы
Set-Location c: - перейти на диск c: (или cd c:)
Get-Content - покажет содержимое объекта (Объектом может быть всё что угодно, например, файл)
ls -filter "*.bat" | Get-Content - отобразить на экране текст, который содержится во всех файлах формата bat в папке.
Set-Content - записать/сохранить что либо
Get-Childitem c:\distr - отобразит содержимое директории
Get-ChildItem -Force с:\distr -Recurse - отобразит содержимое директории с:\distr
ls -Recurce c:\distr - отобразит содержимое директории с:\distr и всех ее каталогов
dir -Recurce c:\distr - отобразит содержимое директории с:\distr и всех ее каталогов
ls -Recurse C:\distr -Filter *.txt - отобразит содержимое директории с:\distr и всех ее каталогов где есть *.txt
Get-ChildItem -Path C:\Windows | Where {$_.extension -eq ".dll"} - покажет из c:\windows все файлы с *.dll
Поиск архивов:
Выполнит поиск архивов в папке D:\Backup, созданных после 1 мая 2011 года,
размер которых находится в диапазоне 10-100 Мб.
Опции Include и Exclude работают соответственно своим названиям т.е.
первая включает а вторая исключает заданный фильтр из поиска.
Get-ChildItem -Path D:\Backup -Recurse -Include *.zip | Where-Object -FilterScript {($_.LastWriteTime -gt "2011-05-01") -and ($_.Length -ge 10mb) -and ($_.Length -le 100mb)}
Удаление \ Создание \ Переименование \Копирование:
Remove-Item - удалить объект (Объектом может быть всё что угодно, например, файл) Remove-Item c:\trash -Recurse - удалить директорию и все ее содержимое New-Item - создать новый объект (Объектом может быть всё что угодно, например, файл) New-Item -Path ‘с:\New Folder’ -ItemType "directory" - создаем директорию New-Item -Path ‘c:\file.tzt’ -ItemType "file" - создаем файл Rename-Item - переименовать обьект (Объектом может быть всё что угодно, например, файл) Rename-Item .\File.txt .\File.txt1 - переименовываем File.txt File.txt1 в текущем каталоге Copy-Item - копировать объект (Объектом может быть всё что угодно, например, файл) Copy-Item -Path c:\file.txt -Destination E:\file1.txt - копирование файла file.txt в file1.txt Force Copy-Item -Path c:\file.txt -Destination E:\file1.txt -Force - копирование с перезаписью файла file.txt в file1.txt
Пример с копированием:
Например, может быть задача поиска в лог файлах определенного выражения по
маске ip-адреса «192.168.100.253» с последующим копированием найденного
в папку D:\TEMP, вариантов множество, вот метод поиска:
$current = Get-Date
$Days = "-30"
$start = $current.AddDays($days)
Get-ChildItem D:\Logs —Filter *.log -Recurse | Where-Object {($_.LastWriteTime.Date -ge $Start.Date) -and ($_.LastWriteTime.Date -le $End.Date)} | Select-String "192.168.100.253" | Copy-Item -Destination D:\TEMP
Пример сценария удаления файла после 30 дней:
Можно придумать сценарий когда на файловой помойке
требуется из определенной папки удалять все файлы и папки старше 30 дней.
$Path = "C:\temp"
$Days = "-30"
$CurrentDate = Get-Date
$OldDate = $CurrentDate.AddDays($Days)
Get-ChildItem $Path | Where-Object { $_.LastWriteTime -lt $OldDate } | Remove-Item
Пример сценария удаления файла после 30 дней
Или если вам требуется удалять все что есть в папке и в подпапках т.е. удаление еще и самих папок.
$Path = "C:\temp"
$Days = "-30"
$CurrentDate = Get-Date
$OldDate = $CurrentDate.AddDays($Days)
Get-ChildItem $Path -Recurse | Where-Object { $_.LastWriteTime -lt $OldDate } | Remove-Ite
Powershell пользователи
Управление сеансами пользователей:
quser /SERVER:SERVER_NAME - видим табличку с теми пользователями которые зашли на сервер SERVER_NAME (смотрим ID нужной сессии) logoff Session_ID /SERVER:SERVER_NAME - завершить сеанс пользователя Session_ID на сервере SERVER_NAME qwinsta /server:SERVER_NAME - список пользователей и их ID на сервере SERVER_NAME rwinsta Session_ID /server:SERVER_NAME - завершить сеанс пользователя Session_ID на сервере SERVER_NAME
Если не работает query:
Последний инструмент две команды которые по умолчанию недоступны, но после регистрации библиотеки query.dll regsvr32 query.dll - регистрируем библиотеку. query session /server:SERVER_NAME - список пользователей и их ID на сервере SERVER_NAME reset session 4 /server:SERVER_NAME - завершить сеанс пользователя Session_ID на сервере SERVER_NAME
Powershell реестр windows
введение:
HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_ MACHINE, HKEY_USERS и HKEY_CURRENT_CONFIG Файлы находятся в папке %SystemRoot%\System32\Config, где %SystemRoot% — папка, куда установлена Windows. Файл Ntuser.dat создается для каждого пользователя и хранит его настройки находится в %SystemDrive%\Documents and Settings\%Username% (Windows XP) или %SystemDrive%\Users\%Username% (для систем начиная с Vista), где %Username% — имя пользователя. Реестр Windows состоит из пяти так называемых корневых разделов (root keys) ФАЙЛ -> КУСТ SAM -> HKEY_LOCAL_MACHINE\SAM SECURITY -> HKEY_LOCAL_MACHINE\SECURITY SOFTWARE -> HKEY_LOCAL_MACHINE\SOFTWARE SYSTEM -> HKEY_LOCAL_MACHINE\SYSTEM SYSTEM -> HKEY_CURRENT_CONFIG DEFAULT -> HKEY_USERS\.DEFAULT Ntuser.dat -> HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
Содержит глобальную информацию о компьютерной системе, включая такие данные об аппаратных средствах и операционной системе, в том числе: тип шины, системная память, драйверы устройств и управляющие данные, используемые при запуске системы. Информация, содержащаяся в этом разделе, действует применительно ко веем пользователям, регистрирующимся в системе.
HKEY_CLASSES_ROOT
Содержит ассоциации между приложениями и типами файлов (по расширениям имени файла).
HKEY_CURRENT_CONFIG
Содержит конфигурационные данные для текущего аппаратного профиля. Аппаратные профили представляют собой наборы изменений, внесенных в стандартную конфигурацию сервисов и устройств, установленную данными разделов Software и System корневого раздела HKEY_LOCAL_MACHINE. В разделе HKEY_CURRENT_CONFIG отражаются только изменения. Кроме того, параметры этого раздела появляются также в разделе HKEY_LOCAL_MACHINE\System\CurentControlSet\HardwareProfites\Current
HKEY_CURRENT_USER
Содержит, профиль пользователя, на данный момент. зарегистрировавшегося в системе, включая переменные окружения, настройку рабочего стола, параметры настройки сети, принтеров и приложений. Этот раздел представляет собой ссылку на раздел HKEY USERS\username, где username — имя пользователя, зарегистрировавшегося в системе на текущий момент.
HKEY_USERS
Содержит все активно загруженные пользовательские профили, включая HKEY_CURRENT_USER, а также профиль по умолчанию. Раздел HKEY_USERS содержит вложенный раздел Default, а также другие разделы, определяемые идентификатором безопасности (Security ID) каждого пользователя.
Допустимые для создания элементы:
ItemType -> Description -> DataType String -> A string -> REG_SZ ExpandString -> A string with environment variables that are resolved when invoked -> REG_EXPAND_SZ Binary -> Binary values -> REG_BINARY DWord -> Numeric values -> REG_DWORD MultiString -> Text of several lines -> REG_MULTI_SZ QWord -> 64-bit numeric values -> REG_QWORD
Команды ля работы с реестром:
Get-PSDrive - список дисков Get-PSDrive -PSProvider Registry - список дисков от провайдера Registry Set-Location HKLM:\SOFTWARE - перейти HKLM:\SOFTWARE cd HKLM:\SOFTWARE - перейти HKLM:\SOFTWARE New-PSDrive -name HKCR -PSProvider registry -root HKLM:\SOFTWARE\ClassesDir HKCR: - создание нового диска HKCR ссылкой на HKEY_LOCAL_MACHINE\SOFTWARE\Classes Remove-PSDrive HKCR - удаление созданного диска производится командой Remove-PSDrive Get-ChildItem HKLM: -recurse -include *PowerShell* -поиск в реестре, найдет все где присутствует ключевое слово *PowerShell* New-Item -Path HKCU:\Environment\NewKey - создаем новый элемент New-Item —type Directory HKCU:\Environment\NewKey—1 - создаем новый элемент md HKCU:\Environment\NewKey—2 - создаем новый элемент Set-Location HKCU:\Environment - переходим в "папку" Copy-Item -Path HKCU:\Environment\NewKey .\NewKey2 - создаем копию созданного ранее ключа Rename-Item -Path HKCU:\Environment\NewKey2 -NewName RenameKey2 - переименовываем Remove-Item -Path HKCU:\Environment\NewKey - удаляем старый del HKCU:\Environment\NewKey - удаляем старый New-ItemProperty -PropertyType String -Path HKCU:\Environment -name NewKey -Value "NewParam" - создаем новое значение Set-ItemProperty -Path .\ -name "NewParam" -Value "UpdatedParam" - меняем значение у существующего элемента Rename-ItemProperty -Path .\ -name "NewParam" -NewName "TestParam" - переименовываем параметр Remove-ItemProperty -Path .\ -name newkey - Удаляем параметр
netsh advfirewall show allprofiles - смотрим настройки по умолчанию netsh advfirewall set allprofiles state on - активируем профили netsh advfirewall set domainprofile firewallpolicy blockinbound - для Domain действием по умолчанию установим блокировку Get-NetFirewallProfile - смотрим настройки по умолчанию Set-NetFirewallProfile -All -Enabled True - активируем профили Set-NetFirewallProfile –Name Domain –DefaultInboundAction Block - для Domain действием по умолчанию установим блокировку Set-NetFirewallProfile -name Public -DisabledInterfaceAliases Ethernet - можем исключить Ethernet-интерфейс из профиля Public Set-NetFirewallProfile -name Public -DisabledInterfaceAliases NotConfigured - вернуть настройки по умолчанию Get-NetFirewallRule - показать все действующие правила фаервола Get-NetFirewallRule -Enabled true -Action block - показать все правила блокировки Get-NetFirewallRule -DisplayName “*IE*” - показать все правила касающиеся IE New-NetFirewallRule -Program “C:\Program Files\Internet Explorer\iexplore.exe” -Action Block -Profile Domain, Private -DisplayName “Block IE” -Description “Block IE” -Direction Outbound - создаем Set-NetFirewallRule -DisplayName “Block IE” -Protocol TCP -RemotePort 80 -RemoteAddress “10.10.10.1-10.10.10.10” -LocalAddress “192.168.1.10” - к правилу "Block IE" добавляем действия (порт и IP) Disable-NetFirewallRule -DisplayName “Block IE” - отключаем правило "Block IE" Show-Command Get-NetFirewallRule - показать все доступные команды для Get-NetFirewallRule
ipconfig - показать сетевые интерфейсы Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE | Select MACAddress,IPAddress - покажет ip и MAC netsh interface ipv4 show interfaces - показать сетевые интерфейсы netsh interface ipv4 set address name="1" source=static address=192.168.1.10 mask=255.255.255.0 gateway=192.168.1.1 - задать настройки для интерфейса IP/MASK/GW netsh interface ipv4 add dnsserver name="Local" address=8.8.8.8 index=1 - задать настройки для интерфейса DNS Get-NetIPInterface - показать сетевые интерфейсы Set-NetIPAddress –InterfaceAlias Ethernet –IPv4Address 192.168.1.10 –PrefixLength 24 –DefaultGateway 192.168.1.1 - задать настройки для интерфейса IP/MASK/GW Set-DNSClientServerAddress –InterfaceAlias Ethernet -ServerAddresses "192.168.1.10","8.8.8.8" - задать настройки для интерфейса DNS Get-NetRoute - показать все маршруты (route) New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop "10.10.10.1" -InterfaceAlias Ethernet - установить маршрут ping ya.ru - проверка хоста telnet ya.ru 80 - проверка соединения с ya.ru порт 80 (tcp) tnc - новая команда аналог ping (Test-NetConnection) tnc ya.ru - проверка хоста Test-NetConnection -ComputerName example.org -source localhost, SRV02 - проверка хоста (Get-ADComputer -LDAPFilter "(name=office*)").DNSHostName | Test-NetConnection -Port 3389 - проверка хоста
С помощью ключей -ReadAccess, -ChangeAccess, -FullAccess, -NoAccess - настраиваются права доступа к общей папке. Get-Command —Module SmbShare - список команд модуля SmbShare Get-Command *SmbShare* - список команд модуля SmbShare New—SmbShare -Name Share -Path D:\Share —FullAccess "LAB\Administrators" —ReadAccess "Everyone" - создание общей папки Share Remove—SmbShare Share - удаление общей папки Get—SmbShareAccess -Name Share - получаем список с разрешениями на общую папку Share Get—SmbShareAccess -Name Share | Grant—SmbShareAccess —AccountName Everyone —AccessRight Full - группе Everyone добавим полный доступ Get—SmbShareAccess -Name Share | Revoke—SmbShareAccess —AccountName Everyone - запретим доступ к шаре Block—SmbShareAccess -Name share —AccountName everyone - запретим доступ к шаре Unblock—SmbShareAccess -Name share —AccountName everyone - восстановление доступа к шаре (Можно использовать после запрета командой Block—SmbShareAccess )
Powershell сеть \ wget
wget
Вот так можно замутить что-то типа wget
$client = New-Object System.Net.WebClient
$client.DownloadString("http://google.com")
с помощью powershell изменить сетевой профиль:
get-NetConnectionProfile - строка InterfaceIndex даст нужную информацию о номере нужного сетевого интерфейса Set-NetConnectionProfile -InterfaceIndex Номер_интерфейса -NetworkCategory Public - изменить сетевое расположение на «Общедоступная» Set-NetConnectionProfile -InterfaceIndex Номер_интерфейса -NetworkCategory Private - изменить сетевое расположение на «Частная» Get-NetConnectionProfile | Set-NetConnectionProfile -NetworkCategory Private - ну или так
с помощью изменения в реестре:
1. С помощью изменения в реестре:
Запустите regedit, найдите ключ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles.
Этот ключ будет содержать профили сетей вида {93BCDFC1-5C66-420A-A786-85AFBCE1D5E8},
в фигурных скобках может быть любой другой номер - найдите среди них вашу сеть по ключу ProfileName (её имя отображается Центре управления сетями)
и измените значение ключа Category в соответствии с тем типом сети, который вам нужен:
0 - Общественная сеть (Public Network)
1 - Частная сеть (Private Network)
2 - Доменная сеть (Domain Network)
ipconfig /displaydns | select-string "Имя записи" | Sort >> text.txt
http://blogs.technet.com/b/adpowershell_ru/archive/2009/02/25/active-directory-windows-powershell-quick-start-guide.aspx
http://blogs.technet.com/b/adpowershell_ru/archive/2009/11/30/3297151.aspx
Import-Module ActiveDirectory
Get-ADObject -Filter { ObjectClass -like "*" } | FT DistinguishedName,Name
qwinsta /server:имя_сервера - посмотрим все активные удаленные сеансы пользователей (id) logoff 3 /server:имя_сервера /v - выполнить выход пользователя id 3
