Форум программистов, компьютерный форум, киберфорум
Наши страницы
PowerShell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/282: Рейтинг темы: голосов - 282, средняя оценка - 4.81
Sanya
Эксперт Windows
13135 / 4585 / 159
Регистрация: 25.10.2010
Сообщений: 9,344
1

Введение в PowerShell

08.08.2012, 17:28. Просмотров 51425. Ответов 7
Метки нет (Все метки)

PowerShell

Windows PowerShell — это новая оболочка командной строки на основе задач и язык сценариев. Она специально разработана для администрирования систем. Встроенная в .NET Framework, оболочка Windows PowerShell помогает ИТ-специалистам и опытным пользователям контролировать и автоматизировать процесс администрирования операционной системы Windows и приложений, работающих в системе Windows.

Возможности стандартного командного интерпретатора cmd в Windows довольно скудны, особенно по сравнению с командными интерпретаторами Unix: ksh, bash, zsh. В Microsoft это тоже поняли и разработали новую оболочку. Вначале она имела кодовое имя Monad, она же MSH, которая впоследствии была переименована в Windows PowerShell.

Используя оболочку Windows PowerShell, администраторы могут управлять системами с помощью отдельных команд или сценариев, автоматизирующих задачи управления. Exchange Server 2007, System Center Operations Manager 2007, System Center Data Protection Manager V2 и System Center Virtual Machine Manager используют оболочку Windows PowerShell для повышения эффективности и производительности.

Если вы раньше не слышали о PowerShell – представьте, что командную строку Windows (cmd.exe) и интегрировали с VBScript, сделав её лёгкой в употреблении и позволяющей вам автоматизировать и контролировать задачи по администрированию системы.

Оболочка PowerShell - это интерактивный командный интерпретатор. С его помощью можно создавать сценарии, позволяющие администраторам автоматизировать управление системными задачами как на сервере, так и на других компьютерах сети. PowerShell, в отличие от cmd, предоставляющего доступ только к файловой системе, позволяет управлять всей операционной системой и ее приложениями. Например, мы можем работать с реестром Windows как с обычной файловой системой.

Технология PowerShell постепенно завоевывает сердца админов, привыкших расходовать время с пользой. Действительно, зачем постоянно тратить время на выполнение одной и той же операции, если ее можно автоматизировать? На PS это сделать легко. К счастью, программирование на PowerShell не сравнить с аналогичной разработкой под bash, а значит, освоить данную вещь сможет даже начинающий программист.

В Windows 7 PowerShell обзавелся графической средой разработки. Программировать сценарии стало еще проще и понятней. Среда обладает всеми необходимыми средствами для комфортной разработки (Отладчик, подсветка синтаксиса и т.д.), что делает процесс разработки схожим с созданием приложения в таких средах как Visual Studio.

Количество доступных командлетов существенно возросло. Добавились командлеты для получения информации и управления такими службами как: IIS, ActiveDirectory и т.д.

Поддержка удаленной работы дарит возможность одновременно выполнять команды на удаленных компьютерах с одного, на котором работает служба.

Несмотря на сходство с командной строкой, PowerShell предоставляет значительно больше функций и более гибка в использовании.

Вот некоторые полезные команды, которые нужно знать для начала работы в PowerShell:

Get-Command - получить список доступных команд;
Get-Help - получить справку по указанной команде;
Get-Drive - получить список дисков;
Set-Location - изменить текущее местоположение (аналог команды cd в cmd);
Set-Alias - создать псевдоним для команды;
Get-Date - вывести дату.
Как и в cmd.exe, поддерживается перенаправление ввода/вывода, например:

Get-Date > current-date.txt

Работа с текстом

Выделите нужный текст с помощью мыши.
Нажмите на правую кнопку мыши - произойдет копирование текста в буфер обмена.
Поместите курсор в нужное место.
Нажмите правую кнопку мыши - произойдет вставка текста из буфера обмена.

Команды для работы с файловой системой

type - просмотр файла;
more - постраничный вывод файла;
copy - копирование одного или нескольких файлов;
move - перемещение одного или нескольких файлов (или переименование каталога);
del - удаление одного или нескольких файлов;
ren - переименование файла;
attrib - изменение атрибутов файла/каталога (скрытый, системный, только чтение, архивный);
fc - сравнение файлов;
find - поиск текстовой строки в одном или нескольких файлах;
grep - поиск текстовой строки (можно использовать регулярные выражения) в файле или в списке файлов;
cd - смена каталога;
dir - вывод содержимого каталога;
tree - вывод дерева каталогов;
md (или mkdir) - создание каталога;
rd - удаление каталога или дерева каталогов.
Автоматическое завершение ввода команды
Используйте клавишу TAB для автоматического завершения ввода команды. Это поможет вам избежать опечаток.

С помощью клавиши «Стрелка вверх» можно вызвать последнюю использованную команду, а с помощью клавиши «Home» переместить курсор в начало строки, а затем ввести данные. Вывести содержимое переменной можно, просто напечатав в командной строке $P.

Прерывание вывода информации
Если на экран выводится много информацию, и вам необходимо прервать эту операцию, то вывод можно прервать комбинацией клавиш CTRL+C.

Переменные
Переменные всегда должны начинаться в символа $. Сохраняя промежуточные результаты в переменной, вы можете всегда получить к ней доступ для ваших целей. Присвоить значение переменной очень просто:

PowerShell
1
$a = get-process | sort-object -descending
Тип переменной выбирается автоматически, но можно установить любой тип .NET: array, bool, byte, char, char[], decimal, double, float, int, int[], long, long[], regex, single, scriptblock, string, type, xml. Он определяется в квадратных скобках в момент присваивания:

PowerShell
1
$var = [int]10;
В сценариях можно использовать условные операторы if-elseif-else, switch, а также операторы циклов while, do-while, do-until, foreach.

Команды, исполняемые в Windows PowerShell, могут быть в форме командлетов, которые являются специализированными классами .NET, созданными с целью предоставления функциональности в PowerShell в виде сценариев PowerShell (.PS1) или являются обычными исполняемыми файлами. Если команда является исполняемым файлом, то PowerShell запускает её в отдельном процессе; если это командлет, то он исполняется внутри процесса PowerShell. PowerShell предоставляет интерфейс командной строки, в котором можно вводить команды и отображать выводимые ими данные в текстовом виде. Этот пользовательский интерфейс, базирущийся на стандартном механизме консоли Windows, предоставляет настраиваемый механизм автозавершения команд, но не обладает возможностью подсветки синтаксиса, хотя при желании её можно обеспечить[2]. В PowerShell также можно создавать псевдонимы (англ. alias) для командлетов, которые при вызове преобразуются в оригинальные команды. Кроме того, поддерживаются позиционные и именованные параметры для командлетов. При выполнении командлета работа по привязке значений аргументов к параметрам выполняется самим PowerShell, но при вызове внешних исполняемых файлов аргументы передаются им для самостоятельного разбора.
Другое понятие, используемое в PowerShell, — это конвейер (англ. pipeline). Подобно конвейерам в UNIX, они предназначены для объединения нескольких команд путём передачи выходных данных одной команды во входные данные второй команды, используя оператор |. Но в отличие от аналога в UNIX, конвейер PowerShell является полностью объектным, то есть данные между командлетами передаются в виде полноценных объектов соответствующих типов, а не как поток байтов. Когда данные передаются как объекты, содержащиеся в них элементы сохраняют свою структуру и типы между командлетами, без необходимости использования какой либо сериализации или посимвольного разбора данных. Объект также может содержать некоторые функции, предназначенные для работы с данными. Они также становятся доступными для получающего их командлета. Вывод последнего командлета в конвейере PowerShell автоматически передаёт на командлет Write-Host, который создаёт текстовое представление объектов и содержащихся в них данных и выводит его на экран.
Так как все объекты PowerShell являются объектами .NET, они содержат метод .ToString(), возвращающий текстовое представление данных объекта. PowerShell использует этот метод для преобразования объекта в текст. Кроме того, он позволяет указать правила форматирования, так что текстовое представление объектов может быть настроено. Однако, с целью поддержания совместимости, если в конвейере используется внешний исполняемый файл, то он получает текстовый поток, представляющий объект, и не интегрируется с системой типов PowerShell.
Расширенная система типов (англ. Extended Type System, ETS) PowerShell базируется на системе типов .NET, но реализует некоторые дополнения. Например, она позволяет создавать различные представления объектов, отображая лишь некоторые из их свойств и методов, а также применять специальное форматирование и механизмы сортировки. Эти представления привязываются к оригинальным объектам с помощью конфигурационных файлов в формате XML.

PowerShell ISE
После удачного выпуска консольной программы PowerShell, разработчики Microsoft сделали графическую консоль/редактор, который называется PowerShell ISE (Integrated Scripting Environment).

PowerShell ISE является полноценным редактором с подсветкой кода, закладками, и возможностью выполнения интерактивных команд. Это крайне удобно при написании сценариев: можно легко протестировать команду, и затем добавить её в основной код. Или наоборот выполнить несколько строк выделенных в открытом файле.

Кроме этого ISE автодополняет набираемый код по нажатию Tab как в командной строке, так и в файлах скрипта. Естественно автодополняются не только названия команд, но и параметры, имена переменных, и т.д., так же как и в привычной консоли.

Еще в ISE встроен отличный отладчик. Вы можете расставлять брейкпойнты (F9), запускать пошаговое выполнение, просматривать содержимое переменных наводя на них курсор, и т.д.

В PowerShell ISE доступен специальный объект, $PsISE, с помощью которого можно управлять интерфейсом утилиты, и даже расширять его, например добавляя свои собственные элементы меню.

Так как ISE создавался с нуля, для PowerShell, он не страдает болезнями доставшимися PowerShell.exe от консольной подсистемы Windows. Так например он изначально, полностью, стопроцентно поддерживает Unicode, и в нем можно легко менять шрифты, и их размер.

Cmdlets

Cmdlets (произносится как commandlets) основаны на синтаксе типа глагол-существительное в ед.ч. Команды записываются на английском языке, например, get-service, get-process, stop-service, get-wmiobject.

Get-Help вызывает интерактивную справку по синтаксису Windows PowerShell.

Get-Help - выводит на экран справку об использовании справки
Get-Help * - перечисляет все команды Windows PowerShell
Get-Help команда - выводит справку по соответствующей команде
Get-Help команда -Detailed - выводит подробную справку с примерами команды

В Windows PowerShell также включены псевдонимы многих известных команд. Например, команды help (классический стиль Windows) и man (классический стиль Unix) работают так же, как и Get-Help.

Чтобы увидеть весь список, состоящий, из более чем 130 предустановленных cmdlets, наберите в командной строке

get-command
Например, чтобы увидеть все сервисы наберите:

get-service
Мощные групповые символы и объекты для манипулирования

Чтобы увидеть все процессы, которые начинаются с буквы «w», и все зависящие от них, нужно просто набрать

get-service w* | format-list DisplayName, DependentServices


Тестирование программы перед выполнением

Windows PowerShell имеет функцию whatif, которая сообщит вам о результате команды, без её исполнения.

Например, мы хотим узнать, какие команды начинающиеся с «w3» могут быть остановлены.

stop-service w3* -whatif
Данная функция очень удобна, и вы можете использовать ее без опасности нанести вред системе.

Получение расшифровки

PowerShell позволяет вам получить расшифровку всех ваших команд. Это облегчит тестирование команд, и одновременно сохранят их для последующего исполнения в скриптах.

Start-Transcript -Path c:\demo\dfoshow.txt
Stop-Transcript


Диски PowerShell

PowerShell позволяет получить доступ к различных дискам. Следует иметь в виду, что в качестве дисков могут выступать не только привычные нам объекты файловой системы, но и другие элементы, например, разделы реестра, переменные среды и т.д. Для доступа к этим дискам используется командлет Get-Psdrive, который выводит все диски. Диски выделяются двоеточием после их имени (:).

Get-Psdrive
cd HKCU:
dir

или
cd ENV:
ls

или
cd CERT:
Get-Childitem


Как видите, мы используем три варианта вывода содержимого диска

dir - как в Windows
ls - как в UNIX

Get-Childitem - собственный командлет

Команды dir, ls и Get-Childitem имеют одинаковые возможности. Это означает, что вы можете использовать те псевдонимы, которые вам больше нравятся. Одно замечание о реестре. По нему можно перемещаться при помощи команд dir и cd, но они не позволяют просмотреть значения ключей реестра. Причина в том, что значения реестра являются свойствами объектов реестра, в то время как размер (Size) или дата последнего изменения (Date last accessed) – это свойства файла. Чтобы увидеть значения реестра, необходима команда Get-ItemProperty. Эта команда выводит все свойства элемента реестра и их значения. Дополнительные сведения можно найти в справке по Windows PowerShell.

Псевдонимы

Чтобы свести к минимуму количество вводимой информации, PowerShell предлагает различные способы сокращения команд при помощи псевдонимов. Введите

Get-Alias | Sort-Object Definition
Данная команда выводит список всех возможных псевдонимов команд. Однако для автоматического дополнения параметров необходимо точно ввести псевдоним, не ошибаясь в количестве букв, в том числе не добавляя лишних букв. Например, команду

Get-Childitem * -Exclude *.tmp | Select-Object name, length
можно заменить на

ls * -ex *.tmp | select n*, le*
Реагирование на события WMI

Поддержка событий — одна из превосходных особенностей ОС Windows. Всякий раз, когда в операционной системе что-то происходит, она инициирует событие. Приложения могут подписываться на уведомления о конкретных событиях и реагировать на них, например выполнением определенных действий. В частности, при щелчке кнопки в диалоговом окне приложение может получать уведомление о событии «щелчок кнопки» и выполнять все предназначенные для этого события действия.

Инициировать события способна также служба Windows Management Instrumentation (WMI), и можно подписать Windows PowerShell версии 2 для получения этих событий. После этого можно задействовать Windows PowerShell для выполнения любых команд, которые должны выполняться в ответ на эти события. Обычно WMI порождает одно из довольно ограниченного числа событий, но это может происходить в одном из огромного количества различных классов WMI. Существуют три ключевых момента использования событий WMI:

понимание, какое событие требуется отслеживать
понимание класса требуемого события
использование командлета Register-WmiEvent для подписки на уведомления о событиях

Простые события
Инициировать события могут некоторые классы WMI. Например, класс Win32_ProcessStartTrace инициирует события в момент запуска процесса. Он делает то же самое в других ситуациях. Когда инициируется событие создания нового процесса, в качестве идентификатора источника оно содержит «Process Started». Для подписки на события необходимо выполнить следующую команду:

Register-WmiEvent –class "Win32_ProcessStartTrace"
–sourceIdentifier "Process Started"

Конечно, простая информация о запуске процесса не очень полезна. Скорее всего потребуется определить какие-то действия для регистрации процесса в журнале, отправки сообщения по электронной почте или даже завершения процесса.

Выполните командлет Get-EventSubscriber, чтобы увидеть только что созданную подписку на уведомления о событии. Чтобы удалить все подписки на события, выполните команду Get-EventSubscriber | Unregister-Event. Также можно задействовать командлет Unregister-Event, чтобы удалить подписку по ее идентификационному номеру.

Полезные события

WMI может инициировать и намного более полезные события системного уровня. Например, событие __instancecreationevent инициируется всякий раз, когда создается новый экземпляр класса WMI, а событие __instancedeletionevent — при удалении экземпляра. Это может показаться не совсем полезным, но только подумайте:почти каждый элемент операционной системы и компьютерного оборудования представлен некоторым экземпляром класса WMI. Например, при подключении съемных устройств хранения данных создается новый экземпляр класса Win32_LogicalDisk. А при завершении процесса удаляется экземпляр класса Win32_Process. Хотите отобразить на экране сообщение, когда пользователь подключит внешний USB-диск?

Register-wmievent –query "select * from __instancecreationevent within 5 where targetinstance isa 'win32_logicaldisk'" –action { Write "You had better not put any proprietary information on that!" }
Этот непростой запрос, поэтому поясним, что он делает:

SELECT * FROM __instancecreationevent (кстати, в названии события два подчеркивания) просто указывает, что нужно получить все свойства данного события;

WITHIN 5 означает, что надо проверять события каждые 5 секунд. Не задавайте слишком малое число, иначе слишком много вычислительных мощностей будет тратиться на постоянную проверку обновлений;

WHERE TARGET INSTANCE ISA 'Win32_LogicalDisk' сообщает WMI, что нужны только события создания нового экземпляра класса Win32_LogicalDisk.

Наконец, параметр –action является заключенным в фигурные скобки блоком сценария, который содержит действия, которые нужно выполнить при возникновении данного события.

Использование параметра –computerName для подписки на события, которые происходят на удаленном компьютере, — это такая особая уловка. Это связано с тем, что необходимо иметь права локального администратора на удаленном компьютере, а само действие происходить на локальном компьютере.

Кстати, не поддавайтесь соблазну подписаться на события создания экземпляра класса CIM_DataFile, который представляет файлы на диске. Служба WMI не очень эффективна для мониторинга создания новых файлов. Скорее всего события будут теряться, а попытки перехватить все события могут создать довольно существенную нагрузку на систему.

Предостережения и уловки

Конечно, реагирование на события будет продолжаться, пока работает оболочка. При закрытии оболочки или при прекращении ее работы по каким-то иными причинам, регистрация событий прекращается.

Это делает события WMI несколько менее полезными для использования на компьютерах пользователей, поскольку вряд ли PowerShell будет всегда работать на каждом компьютере. Однако это очень полезный прием для мониторинга процессов и других компонентов на серверах, где существует больше возможностей для контроля.

Из блока сценария –action есть доступ к автоматической переменной $args, которая содержит все аргументы, передаваемые от события. Используйте Write $args в блоке сценария –action, чтобы увидеть, какие аргументы есть у данного события WMI.
11
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 17:28
Ответы с готовыми решениями:

PowerShell vs PowerShell ISE
Скажите, пожалуйста, чем PowerShell отличается от PowerShell ISE. Спасибо.

Powershell и AD
Доброго времени суток! Первый раз в жизни взялся за Powershell и столкнулся со...

Powershell и 'globbing'
Можно ли с помощью каких либо опций заставить powershell для Windows вести...

Видеолекции по PowerShell
Смотрим видео " Сергей Шеин Автоматизация администрирования Windows Server 2008...

Изучение PowerShell
// Перенесено из темы: http://www.cyberforum.ru/cmd-bat/thread1453691.html ...

7
Sanya
Эксперт Windows
13135 / 4585 / 159
Регистрация: 25.10.2010
Сообщений: 9,344
08.08.2012, 17:28  [ТС] 2
Часто задаваемые вопросы

Как запускать файлы EXE, COM, CMD, BAT
Просто укажите полный путь к файлу или только имя файла, если путь к нему содержится в переменной Path

Как вызвать скрипт из текущей папки если папка не содержится в переменной Path
Укажите полный путь к файлу или используйте .\ для обозначения текущего каталога: .\Test.Ps1

Как использовать переменные окружения?
В PowerShell переменные окружения вынесены в специальный диск: Env:\

Чтобы получить содержимое переменной окружения используется следующая конструкция:

Write-Host "Добро пожаловать $($env:computername)!"

Как выполнить VB Script код в PowerShell (например если вы знаете как что то сделать в VBS, но не знаете как в PowerShell)?
$vbs = New-Object -com MSScriptControl.ScriptControl
$vbs.Language = "VBScript"
$vbs.Eval('msgbox("Привет!")')
$code = 'InputBox("Введите ваше имя","Анкета")'
$vbs.Eval($code)

Как выбрать файлы с размером более 1 Мб

dir | where {$_.length -ge 1mb}
Все процессы запущенные из папки Windows
Get-Process | where {$_.path -like "c:\windows*"} | Stop-Process -whatif
Расшаренные диски

Get-WmiObject win32_share | where {$_.path -like "?:"}

Как посмотреть какие свойства есть у объекта?
С помощью команды Get-Member:

Get-Process | Get-Member -type property
Или с помощью команды Format-List *

Get-Process explorer | Format-List *
Как выбрать только некоторые строки, например, для обработки текстового файла

Используйте Select-String:

Get-Content C:\Windows\WindowsUpdate.log | Select-String "error|warning"
Get-Content C:\Windows\WindowsUpdate.log | where {$_ -match "error 0x(\d+)"} | foreach {$_.matches[1]}

Включить регистр символов

Операторы -eq -like -match и т.п. не чувствительны к регистру символов. Припишите к оператору букву "c" (от Case), если регистр важен:

"Test" -eq "test"
"Test" -ceq "test"

Как посмотреть что это за команды - "%", "?", "gps" или "fl"?

Get-Command % | fl
Get-Command `? | fl
Get-Command gps, fl | ft -AutoSize
Как изменить приглашение (prompt)?

Надо переопределить функцию prompt. Всё что вернёт эта функция будет приглашением. А можно в ней же выполнить и другие команды:

function prompt {
$host.UI.RawUI.WindowTitle = Get-Location ;

$env:username + "@" +

$env:computername + ":" +

(get-location | split-path -leaf) + "> "}

Получить текущий каталог

В cmd.exe есть переменная %cd% возвращающая текущий каталог. В PowerShell используется команда $pwd. Кроме того можно получить текущий каталог с помощью команды Get-Location.

Как вывести текст, и не переводить курсор на другую строку?

Write-Host "Начало строки." -noNewLine; Write-Host " Конец строки."

Как изменить фон и цвет шрифта в окне PowerShell?
Задать соответствующие свойства объекта $host:

$host.UI.RawUI.BackgroundColor = "Black"
$host.UI.RawUI.ForegroundColor = "Green"
Иногда бывает необходимо выделить результаты при помощи цвета, сделав их удобнее для чтения. Команда Write-Host имеет такие параметры, как -Foregroundcolor и -Backgroundcolor.

Write-Host "Ошибка!" -ForegroundColor "Red"
Write-Host "Красный текст на синем фоне" -Foregroundcolor red -Backgroundcolor blue
Команда Get-Help Write-Host -Detailed даст вам полный список возможных цветов. Более наглядный пример для вывода всех 16 цветов.

0..15 | %{Write-Host " " -back $_ цвет;[System.ConsoleColor]$_}
Но, по возможности используйте командлеты Write-Error, Write-Verbose и Write-Warning. Например:

Write-Warning "Будьте внимательны"

Как изменить цвета других сообщений, например ошибок или предупреждений?
Нужно задать соответствующие свойства

$host.PrivateData.ErrorForegroundColor
$host.PrivateData.WarningForegroundColor

$host.PrivateData.VerboseForegroundColor

Как создать алиас (псевдоним)?
Set-Alias ss Select-String
Если необходимо задать параметры для команды, то можно просто создать функцию:

function fh ($Topic) {Get-Help $Topic -full | more}
А если вы хотите чтобы эти алиасы/функциии сохранились - надо поместить их в свой профиль.

Как создать/изменить профиль?
Если он уже существует (Test-Path $Profile) то можно открыть его например так:

notepad $profile
Если же он еще не создан (при установке PowerShell не создает профиль) то можно создать его вот так:
New-Item -Type file -Path $profile -Force
Как вставить в строку значение свойства объекта или результат выражения?

$e = Get-Process explorer
Write-Host "Путь к проводнику: $e.Path" # не получится

Write-Host "Путь к проводнику: $($e.Path)"

Write-Host "Путь к проводнику: $((Get-Process explorer).Path)"

Write-Host "Дважды два равно $(2 * 2)!"

Как посчитать количество объектов в конвейере?
Используйте командлет Measure-Object или свойство массивов .Count

Get-Process | where {$_.ws -gt 50mb} | Measure-Object
(Get-Process | where {$_.ws -gt 50mb}).count

Как запустить скрипт из планировщика?
Следует запустить C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe с ключем -Command Скрипт

Еще полезные ключи powershell.exe:
-NoLogo
-NonInteractive
-NoProfile

У командлетов зачастую весьма длинные названия аргументов. Можно не писать их полностью?
У большинства команд задан порядок следования аргументов. Если известен этот порядок, то можно вообще не писать названия аргументов:

Set-Content -Path test.txt -Value "Text"
Set-Content test.txt "Text"
Можно дополнять имена аргументов с помощью клавиши табуляции.

Можно просто писать только первые несколько букв аргумента, и если у данного командлета нет других аргументов, начинающихся на эти буквы - то сработает:

Write-Host test -f red -b blue
Get-Command -n process # Не сработает, потому что есть еще аргумент -Name
Get-Command -no process # Сработает, потому что это уже точно не -Name
Как при написании скрипта или команды перейти на следующую строчку?
Используйте символ апострофа:

Get-Command `
-Name Explorer
Как использовать в строке символы перевода строки, табуляции, и т.п.?
С новой строки - `n;`t - табуляция, символ кавычек - `" и апострофа ` - `

В качестве маскирующего символа в PowerShell используется апостроф. Если бы, как обычно, использовался обратный слеш - из PowerShell получился бы ужасный шелл.

Как посмотреть справку по команде?
Get-Help
Get-Help Get-Process

Get-Help Get-Process -Full

Get-Help Get-Process -Parameter Name

Get-Help Get-Process -Examples
Как посмотреть справку по конструкции языка или другой теме?
Get-Help about_* | Format-List Name, Synopsis
Get-Help About_if | more
Как подключать расширения PowerShell , например расширение для работы с Exchange 2007
Get-pssnapin -registered | add-pssnapin
Каким образом в теле функции определяется результат, который должна вернуть функция?
Всё, что не присваивается переменной - возвращается. В общих чертах так. Т.е. function test {"text"} вернёт строку "text"

Как управлять групповыми политиками
C выходом Windows 7 и Windows Server 2008 R2 появилась возможность не только работать с объектами групповых политик GPO, но делать более сложные вещи:

Создавать, удалять, проводить резервное копирование, собирать отчеты и импортировать GPO;
Создавать, обновлять и удалять связь объектов групповых политик с контейнерами Active Directory Directory Services;
Конфигурировать наследование и права доступа к организационным единицам OU;
Настраивать параметры Group Policy Preferences хранящиеся в реестре;


Мне действительно нужно выбрать только некоторые строки, например я хочу обработать текстовый файл.
Используйте Select-String:
Code Snippet
Get-Content C:\Windows\WindowsUpdate.log | Select-String "error|warning"
Get-Content C:\Windows\WindowsUpdate.log | where {$_ -match "error 0x(\d+)"} | foreach {$_.matches[1]}

Все что здесь написано, было найдено в инете два года назад, для написания курсовой работы. Так, что за достоверность данных я поручиться не могу
0
Dragokas
Эксперт WindowsАвтор FAQ
17014 / 7071 / 856
Регистрация: 25.12.2011
Сообщений: 10,891
Записей в блоге: 16
08.08.2012, 23:50 3
А главное, если ни разу не пользовались,
разрешить политику запуска неподписанных скриптов,
Запускаем CMD от имени администратора. Задаем команды:
Bash
1
2
3
powershell
Set-ExecutionPolicy RemoteSigned
exit

иначе система проигнорирует самописный файл, или вручную введенную команду.

Здесь http://technet.microsoft.com/en-us/library/ee176949.aspx
про:
  • синтаксис;
  • переменные;
  • приоритет запуска скриптов при наличии одинаковых названий файлов;
  • запуск PS1-скрипта из пакетного файла (CMD), а также с использованием VBScript.
9
Eva Rosalene
T for Trans-
4050 / 1589 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
13.05.2013, 19:12 4
К сожалению, разобраться в этом для новичка достаточно сложно, система вложенности методов/свойств едва ли не уникальна для большинства объектов.
1
MihaniX
135 / 45 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
19.08.2013, 13:44 5
C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe
Очень удобная фишка!
Не знаю как для вас - а для меня это открытие
4
Eva Rosalene
T for Trans-
4050 / 1589 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
06.12.2013, 21:29 6
Вот изучаю справку и понимаю, что этот язык невероятно мощный...
0
nober
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 13
04.11.2016, 14:27 7
Не вижу здесь команды (завис) каким образом преобразовать полученные данные из powershell s текстовый читабельно-удобный формат. Какая команда и как вообще находить нужные команды?
0
INNeanshev
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 2
08.02.2018, 13:36 8
Цитата Сообщение от Sanya Посмотреть сообщение
Псевдонимы

Чтобы свести к минимуму количество вводимой информации, PowerShell предлагает различные способы сокращения команд при помощи псевдонимов. Введите

Get-Alias | Sort-Object Definition

Данная команда выводит список всех возможных псевдонимов команд. Однако для автоматического дополнения параметров необходимо точно ввести псевдоним, не ошибаясь в количестве букв, в том числе не добавляя лишних букв. Например, команду

Get-Childitem * -Exclude *.tmp | Select-Object name, length

можно заменить на

ls * -ex *.tmp | select n*, le*
Здесь показано, но как-то явно не отмечено, что имена параметров тоже можно сокращать. И их сокращение допустимо не только через использование явно зарегистрированных псевдонимов, как это сделано для командлетов, но и просто использованием любого количества букв из начала имени параметра, достаточного для того, чтоб отличить его от других именованных параметров этого командлета! Именно эта фича позволяет в ls * -ex *.tmp | select n*, le* писать -ex вместо -Exclude. Проблема в том, что я никак не могу найти про эту фичу в документации!

Впрочем, настоящие псевдонимы параметрам тоже можно зарегистрировать - см. про атрибут Alias в тексте, возвращаемом командой Get-Help about_Functions_Advanced_Parameters

А писать n* вместо name и le* вместо length в этом примере можно потому, что в параметры Select-Object, Get-Help и многих других командлетов можно передавать шаблоны значений, а не значения (то есть, можно "использовать подстановочные знаки", как это называется в документации. См. Get-Help about_Parameters и Get-Help about_Wildcards). А в кавычки их можно не заключать, потому что есть режим парсинга аргументов, про что написано в Get-Help about_parsing

Так же стоит упомянуть, что подробности про алиасы командлетов, функций, скриптов и файлов есть в тексте, возвращаемом Get-Help about_Aliases
0
08.02.2018, 13:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2018, 13:36

PowerShell в Windows 7
В семерке есть встроенный PowerShell модуль, но при загрузке он выдает...

Возможности PowerShell
Хочу понять, какие возможности у этой штуки :) чуть позже буду смотреть...

Мьютекс в PowerShell
Возник такой вопрос допустим отработало условие if(func1) и код запустился в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru