# Переменные $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