Главная страница
Навигация по странице:

  • ПРИЛОЖЕНИЕ ТЕОРИЯ WINDOWS POWERSHELL Теоретические принципы Windows PowerShell Windows PowerShell – краткое введение

  • Цели разработки Windows PowerShell

  • О тексте, разборе текста и объектах

  • Команды Windows и служебные программы

  • CMD, WScript или PowerShell Что выбрать

  • ПРИЛОЖЕНИЕ СЦЕНАРИИ И БЕЗОПАСНОСТЬ Безопасность при использовании сценариев

  • Windows PowerShell


    Скачать 0.93 Mb.
    НазваниеWindows PowerShell
    АнкорWindows_Powershell_RU
    Дата22.05.2020
    Размер0.93 Mb.
    Формат файлаpdf
    Имя файлаWindows_Powershell_RU.pdf
    ТипКнига
    #124664
    страница4 из 4
    1   2   3   4
    A11
    get-service | sort-object status | convertto-html name, status > .\a10.html
    B1
    get-childitem * -exclude *.tmp | select-object name, length
    B2
    get-childitem * -exclude *.tmp | select-object name, length | sort-object length, name
    B3
    get-childitem | get-member
    B4
    get-childitem | group-object extension | sort-object count
    B5
    (get-childitem .\*.tmp | measure-object length -sum).sum
    B6
    remove-item .\*.tmp
    B7
    get-childitem | where-object {$_.length -gt 2000000}
    | foreach-object {remove-item $_.fullname}
    B8
    get-childitem | select-object extension | sort-object extension -unique | foreach-object {new-item (".\New" + $_.extension) -type directory}
    B9
    get-childitem | where-object {$_.mode -notmatch "d"} | foreach-object {$b= ".\New" + $_.extension; move-item $_.fullname $b}
    B10
    get-childitem -recurse > .\finaloutput.txt

    B11
    get-childitem *.doc | foreach-object {$_.Isreadonly = 0}
    C1
    $p | measure-object CPU -min -max -average
    C2
    $p | sort-object CPU -Descending | Select-Object -first 5
    D1
    (get-wmiobject -class win32_computersystem).username
    D2
    $a = new-object -comobject excel.application
    $a.Visible = $True
    $b = $a.Workbooks.Add()
    $c = $b.Worksheets.Item(1)
    $c.Cells.Item(1,1) = "Service Name"
    $c.Cells.Item(1,2) = "Service Status"
    $i = 2 get-service | foreach-object{ $c.cells.item($i,1) = $_.name
    $c.cells.item($i,2) = $_.status; $i=$i+1}
    $b.SaveAs("C:\Users\frankoch\Downloads\Test.xls")
    $a.Quit()
    E1
    get-eventlog "Windows PowerShell" | group-object eventid | sort-object name get-eventlog "Windows PowerShell" | where-object {$_.eventid -eq 403}
    E2
    get-eventlog system -newest 15 | sort-object eventid -descending

    ПРИЛОЖЕНИЕ
    ПРИМЕРЫ СЦЕНАРИЕВ
    Примеры к Windows PowerShell – от простых к сложным
    Вы можете просто скопировать следующие сценарии и запустить их в Windows
    PowerShell. Они демонстрируют теоретические возможности PowerShell, а также то, что краткое введение не в состоянии описать все возможности Windows PowerShell. Чтобы скопировать сценарии, выделите текстовые строки сразу после первого символа «>» до комментариев (не включая комментарии). Эти упражнения в основном взяты из горячо рекомендуемой книги «Windows PowerShell in Action» Брюса Пайетта, создателя Windows
    PowerShell. В этой книге примеры снабжены очень подробными пояснениями, на случай если вам потребуется дополнительная информация.
    Пример 1: Прямой вывод строки
    Самая короткая программа "Hello world":
    "Hello world"
    Комментарии:
    Windows PowerShell может непосредственно распознавать введенную строку и выводить ее на экран.
    Пример 2: Анализ файла журнала
    Создает список всех файлов журналов в папке «Windir»; находит файлы, содержащие слово «Error», выводит имя файла журнала и строку с ошибкой: dir $env:windir\*.log | Select-String -List error | Format-Table path,linenumber -Autosize
    Комментарии:
    Может возникнуть сообщение об ошибке, связанной с недостатком полномочий и т.д.
    Игнорируйте подобные сообщения.
    Пример 3: Ваша программа для чтения RSS
    Вызывает веб-страницу, читает ленту RSS, выводит сообщения из ленты RSS и их
    URL-адреса:
    ([xml](New-Object net.webclient).DownloadString(
    "http://blogs.msdn.com/powershell/rss.aspx")).rss.channel.item | Format-Table title,link
    Комментарии:
    В самом начале соединение с веб-сайтом может устанавливаться достаточно медленно.

    Пример 4: Добавление окон в сценарий
    Создает отдельную форму WinForm для графического вывода информации:
    [void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
    $form = New-Object Windows.Forms.Form
    $form.Text = "My First Form"
    $button = New-Object Windows.Forms.Button
    $button.text="Push Me!"
    $button.Dock="fill"
    $button.add_click({$form.close()})
    $form.controls.add($button)
    $form.Add_Shown({$form.Activate()})
    $form.ShowDialog()
    Комментарии:
    Для завершения просто щелкните по новому окну (может находиться за окном
    Windows PowerShell).

    ПРИЛОЖЕНИЕ
    ТЕОРИЯ WINDOWS POWERSHELL
    Теоретические принципы Windows PowerShell
    Windows PowerShell – краткое введение
    Предыдущие попытки Microsoft по созданию оболочек командной строки были не слишком успешны. Старый command.com, вероятно, соответствовал уровню первых версий
    MS DOS, но растущее число функций операционной системы вскоре превысило его возможности. Оболочка cmd.exe, появившаяся в Windows NT, предоставляла пользователям дополнительные средства. Но по сравнению с популярными оболочками
    Unix, такими как Bash, командная строка Microsoft, несомненно, имела множество недостатков.
    Теперь Microsoft полностью изменила ситуацию. Создавая Windows PowerShell (ранее называлась Monad Shell, MSH), разработчики средств администрирования хотели дать нам оболочку для Windows, которую можно будет использовать для написания любых сценариев для управления системой. Windows PowerShell следует совершенно новой концепции, в отличии от тексто-ориентированных оболочек, таких как bash.
    Цели разработки Windows PowerShell
    Windows PowerShell – это новая оболочка командной строки Windows, разработанная специально для системных администраторов. Эта оболочка содержит интерактивную командную строку и среду сценариев, которые можно использовать как по одиночке, так и вместе. В противоположность большинству оболочек командной строки, которые принимают и возвращают текст, Windows PowerShell базируется на объектной модели, появившейся в
    .NET Framework 2.0. Это фундаментальное отличие в среде позволяет использовать для управления и настройки Windows совершенно новые инструменты и методики.
    Windows PowerShell вводит идею командлетов (пишется «cmdlet»). Командлет – это простой инструмент командной строки, интегрированный в оболочку и выполняющий единственную функцию. Хотя вы можете использовать командлеты поодиночке, их мощь становится более очевидной при использовании комбинаций командлетов для выполнения сложных задач. Windows PowerShell содержит несколько сотен базовых командлетов, а также дает возможность создавать собственные командлеты и сценарии и передавать их другим пользователям.
    Как многие другие командные оболочки, Windows PowerShell дает вам доступ к файловой системе компьютера. Благодаря поставщикам Windows PowerShell вы получаете легкий доступ к другим хранилищам данных, таким как реестр и хранилища сертификатов.
    О тексте, разборе текста и объектах
    PowerShell полностью объектно-ориентирована. По сравнению с обычными оболочками она работает иначе, результатом выполнения команды будет не текст, а объект
    (дальше этот момент будет рассмотрен подробнее). Но аналогично более ранним популярным оболочкам, она имеет конвейер, в который передаются и в котором
    обрабатываются результаты отдельных команд. Единственная разница состоит в том, что исходные и промежуточные значения и результаты являются объектами, а не текстом.
    Объекты PowerShell не отличаются от объектов в программах C++ или C#. Вы можете представить объект как блок данных с атрибутами и методами. Методы представляют собой действия, которые можно совершить с объектом.
    Если, например, вы обращаетесь к службе из Windows PowerShell, вы на самом деле используете объект, соответствующий этой службе. Если вы выводите на экран информацию о службе, вы выводите атрибуты соответствующего объекта службы. И если вы запускаете службу, то есть меняете атрибут статуса службы на «запущен», вы используете метод объекта службы. По мере увеличения опыта вы лучше поймете преимущества обработки объектов и будете работать с объектами осознанно.
    Объектно-ориентированная концепция PowerShell делает стандартный разбор текста командных оболочек Unix (анализ/оценка) и текстовую информацию со всеми ее проблемами и склонностью к ошибкам, полностью излишними. Чтобы пояснить это, рассмотрим следующий пример:
    Предположим, вы хотите получить список всех процессов, которые расходуют более
    100 дескрипторов. В традиционной командной оболочке Linux мы должны вызвать команду для просмотра процессов (ps -A). Эта команда возвращает текстовый список. Каждая строка будет содержать сведения о процессе, разделенные пробелами. Вы должны разобрать эти строки с помощью отдельного инструмента, отфильтровать коды ID процессов, после чего с помощью другой программы запросить число используемых процессом дескрипторов.
    Затем вы должны разобрать полученный в виде текста результат, отфильтровать нужные строки и вывести на экран соответствующий текст.
    В зависимости от того, насколько хорошо вы обрезаете и фильтруете информацию из текста, выдаваемого функциями, этот подход заслуживает доверия в большей или меньшей степени. Однако, например, если заголовок столбца в выходных данных изменился, и имена процессов стали слишком длинными, у вас несомненно возникнут проблемы.
    PowerShell использует принципиально другой подход. Вы также начинаете с команды get-process, которая возвращает все запущенные процессы в операционной системе.
    Только в этом случае вы получаете список объектов, состоящий из объектов процессов. Эти объекты можно исследовать на предмет их атрибутов и запросить значения прямо у них – таким образом, вам не нужно исследовать текстовые строки и разделять их на столбцы. Мы еще поговорим об этом более подробно.
    Новый язык сценариев
    В Windows PowerShell не используется какой-либо существующий язык, для нее был создан собственный. Причины этого таковы:
    • . Windows PowerShell необходим язык для управления объектами .NET.
    • . Язык должен поддерживать сложные задачи, не делая простые задачи сложными.
    • . Язык должен соответствовать соглашениям других языков, используемых для программирования в .NET, таким как C#.
    В настоящее время каждый язык имеет свои собственные команды. В Windows
    PowerShell мы обеспечили соответствие всех команд определенной логике с точки зрения конструкций и наименования. Командлет представляет собой специализированную команду, которая работает с объектами в Windows PowerShell. Вы можете узнать командлеты по их именам: глагол и существительное, всегда в единственном числе,
    разделенные значком тире (-), например, get-help, get-process и start-service. В Windows
    PowerShell большинство командлетов очень просты и созданы для использования совместно с другими командлетами. Так, например, командлеты «Get» только извлекают данные, командлеты «Set» создают или изменяют данные, командлеты «Format» форматируют данные, а командлеты «Out» пересылают выводимые данные в указанное место.
    Команды Windows и служебные программы
    Вы привыкли использовать определенные команды. Новый язык, который не принимает во внимание этот факт, обречен на быстрое забвение. Поэтому в Windows
    PowerShell вы можете использовать стандартные команды Windows и запускать программы
    Windows, имеющие графический интерфейс, например Блокнот (Notepad) и Калькулятор
    (Calculator). Кроме того, как и в Cmd.exe, вы можете получать текстовый вывод из других программ и использовать этот текст в командной оболочке. Даже если команды, такие как dir, ls или cd, не следуют официальному синтаксису Windows PowerShell, они будут работать и могут использоваться без каких-либо проблем.
    Интерактивная среда
    Как и в других командных оболочках, в Windows PowerShell поддерживается полностью интерактивная среда. Если вы в ответ на приглашение вводите команду, она выполняется и результат выводится в окно командной оболочки. Вы можете пересылать результат работы команды в файл или на принтер, а также использовать оператор конвейера (|) для передачи его другой команде.
    Поддержка сценариев
    Если вы уже повторяли одни и те же команды, мы рекомендуем не вводить команды или последовательность команд по отдельности, а сохранить их в файле и выполнять этот файл. Файл, содержащий команды, называется сценарием.
    Аналогично поддержке интерактивных интерфейсов, Windows PowerShell обеспечивает полную поддержку сценариев. Вы можете запустить сценарий, введя его имя в строке приглашения. Расширение файлов сценариев Windows PowerShell scripts - .ps1; вводить расширение файла необязательно.
    Хотя сценарии используются очень часто, они также могут быть использованы для распространения вредоносного кода. Поэтому вы можете определить в Windows PowerShell политики безопасности (также называемые политиками выполнения), чтобы указать, какие сценарии могут запускаться, и должны ли они иметь цифровую подпись. Чтобы избежать ненужного риска, ни в каких политиках выполнения Windows PowerShell не разрешается выполнять сценарии двойным щелчком на их значках, что можно делать, например, со старыми файлами .bat, .cmd или.vbs.
    CMD, WScript или PowerShell? Что выбрать?
    Для Windows XP имеется три оболочки языков сценариев: старая добрая оболочка
    CMD, Windows Scripting Host для ваших сценариев VB или Jscript, а теперь и Windows
    PowerShell. Но не бойтесь, вам не нужно выбирать между оболочками или беспокоиться о том, что одна из них устареет. Даже в новых версиях Windows, таких как Vista или Longhorn
    Server, вы обнаружите, что все три оболочки остались равноправными. Вы можете использовать ту из них, которую предпочитаете, на ваш вкус. Вы также можете использовать оболочку, которая наилучшим образом подходит для конкретной задачи. Если
    вы до сих пор написали немного сценариев, сейчас самое время начать работать с Windows
    PowerShell, чтобы иметь под рукой новейшую и самую простую в использовании технологию. Решая практические задачи, которые у вас есть или будут, вы увидите, как это просто и какими мощными могут быть простые сценарии, не перерывая гигантские тома и книги из 60-х и 70-х годов о программировании командных файлов.
    Windows PowerShell 1.0
    Хотя Windows PowerShell имеет версию 1.0, качество продукта весьма впечатляет, и я могу с чистой совестью рекомендовать его использование в практической работе. В основном это вызвано тем, что Windows PowerShell на самом деле является действительно новым способом использования популярной среды .NET Framework 2.0. Однако вам следует учитывать небольшой номер версии продукта.
    Уже набор функций должен сказать вам, что не все, необходимое вам, уже имеется в
    Windows PowerShell. Windows PowerShell сейчас может обеспечить прямой доступ к файловым системам, журналам сообщений, записям реестра, интерфейсам и объектам
    .NET, WMI и ADSI; однако удаленная работа в нем еще не реализована. Это означает, что доступ к другим компьютерам работает с помощью средств WMI или .NET. В будущем мы сможем, вероятно, использовать для администрирования новые интерфейсы веб-служб, которые были сертифицированы в 2006 году. Сейчас следует удовлетвориться использованием существующих проверенных методов, таких как WMI и .NET.

    ПРИЛОЖЕНИЕ
    СЦЕНАРИИ И БЕЗОПАСНОСТЬ
    Безопасность при использовании сценариев
    Со службой Windows Scripting Host (WSH), введенной в Windows 2000, Microsoft заявила о создании новой мощной системы сценариев. Эта система была настолько мощной, что была использована вирусописателями в качестве новой арены. Неопытные пользователи получали несколько первых электронных писем с многообещающими привлекательными картинками, но когда они открывали вложение, там было не на что смотреть, они оборачивались сценариями VBScript, которые приступали к взлому системы.
    Windows PowerShell делает все возможное, чтобы противостоять этому типу угроз.
    Так, базовые настройки Windows PowerShell предполагают запрет запуска любых сценариев.
    Эта функция должна быть явным образом активирована системным администратором.
    Активация обеспечивает различные уровни безопасности, которые используют подписание сценариев. Кроме того, расширение файлов Windows PowerShell (PS1) ассоциировано с блокнотом (Notepad). Даже если ваша среда допускает выполнение сценариев, все неблагоразумные двойные щелчки по почтовым вложениям или файлам будут просто приводить к запуску Блокнота и демонстрации исходного кода. И наконец, Windows
    PowerShell всегда требует явного ввода полного пути для файлов, которые которые не находятся в папках обозначенных в переменной окружения %Path%. Это может предотвратить случайное выполнение программы, которую вы не хотели использовать, в
    Windows PowerShell.
    Чтобы быть в состоянии запустить сценарий, вам следует изменить настройки безопасности для Windows PowerShell. Для этой цели используются два командлета: get- executionpolicy и set-executionpolicy. С помощью get-executionpolicy вы получаете существующие настройки. Существует четыре уровня безопасности:
    Значение политики
    Описание
    Restricted (Запрещено, по умолчанию)
    Сценарии не запускаются
    Allsigned (Все подписанные)
    Запускаются только подписанные сценарии
    RemoteSigned (Удаленные подписанные)
    Разрешен запуск локальных сценариев, прочие сценарии должны быть подписаны
    Unrestricted (Без ограничений)
    Запускаются все сценарии
    Для изменения этих настроек системный администратор должен вызвать, например, команду set-executionpolicy remotesigned
    Microsoft предоставляют шаблон групповой политики, чтобы автоматически устанавливать ключ в больших организациях. Дополнительные сведения по этой теме можно найти в документации по Windows PowerShell.

    ЗАКЛЮЧЕНИЕ
    Я хочу поблагодарить свою жену Петру за ее любовь и участие. Она отказалась от множества воскресных поездок и вечеров со мной, когда я проводил время без нее, со своим компьютером.
    Эта книга не была бы написана без разработчиков Windows PowerShell,и я искренне благодарен им. Особые благодарности я, разумеется, выражаю Брюсу Пайетту, который дал мне начальный импульс своей книгой «Windows PowerShell in Action». Очень рекомендую прочесть ее!
    Не все части этой книги я писал сам, в частности, теоретические разделы взяты из содержимого, опубликованного в Microsoft MSDN или файла справки Windows PowerShell.
    Там вы найдете больше полезной информации, которую я рекомендую вам прочитать.
    Если у вас имеются комментарии или советы по этой книге, напишите мне по электронной почте. Я могу быть не в состоянии ответить каждому лично, но буду очень признателен за любую конструктивную критику и похвалы: frankoch@microsoft.com

    PowerShell – краткая шпаргалка
    Отдельные команды
    Для справки по любому коммандлету используйте get-help
    Get-Help Get-Service
    Чтобы получить список доступных коммандлетов, используйте get-command
    Get-Command
    Чтобы получить список всех свойств и методов объекта,
    используйте get-member
    Get-Service | Get-Member
    Установка политики безопасности
    Просмотр и изменение политики безопасности с помощью
    Get-ExecutionPolicy и
    Set-
    ExecutionPolicy
    Get-Executionpolicy
    Set-Executionpolicy remotesigned
    Выполнение сценария powershell.exe –noexit &"c:\myscript.ps1"
    Функции
    Параметры разделяются пробелами.
    Return необязателен. function sum ([int]$a,[int]$b)
    { return $a + $b
    } sum 4 5
    Переменные
    Должны начинаться с $
    $a = 32
    Могут иметь тип
    [int]$a = 32
    Массивы
    Инициализация:
    $a = 1,2,4,8
    Запрос элемента:
    $b = $a[3]
    Константы
    Создаются без $
    Set-Variable –name b –value 3.142 –option constant
    Используются с $
    $b

    Создание объектов
    Создание экземпляра объекта COM
    New-Object -comobject
    $a = New-Object –comobject "wscript.network"
    $a.username
    Создание экземпляра объекта .Net Framework. При необходимости могут передаваться параметры
    New-Object –type <.Net Object>
    $d = New-Object -Type System.DateTime 2006,12,25
    $d.get_DayOfWeek()
    Запись в консоль
    Имя переменной
    $a или
    Write-Host $a -foregroundcolor "green"
    Пользовательский ввод
    Для получения ввода от пользователя используйте Read-Host
    $a = Read-Host "Enter your name"
    Write-Host "Hello" $a
    Передача аргументов командной строки
    Передаются в сценарий, разделяясь пробелами myscript.ps1 server1 benp
    Получаются в сценарии в массив $args
    $servername = $args[0]
    $username = $args[1]
    Разное
    Перенос строки `
    Get-Process | Select-Object ` name, ID
    Комментарии #
    # код отсюда не исполняется
    Объединение строк ;
    $a=1;$b=3;$c=9
    Передача выходных данных по каналу другой команде |
    Get-Service | Get-Member

    Цикл For
    Повторяет одинаковые шаги определенное количество раз
    For ($a=1; $a –le 10; $a++)
    {$a}
    Цикл ForEach
    Цикл по коллекции объектов
    Foreach ($i in Get-Childitem c:\windows)
    {$i.name; $i.creationtime}
    Цикл Do While
    Повторяет набор команд, пока выполняется условие
    $a=1
    Do {$a; $a++}
    While ($a –lt 10)
    Цикл Do Until
    Повторяет набор команд до выполнения условия
    $a=1
    Do {$a; $a++}
    Until ($a -gt 10)
    Оператор If
    В зависимости от заданного условия выполняет тот или иной участок кода
    $a = "white" if ($a -eq "red")
    {"The colour is red"} elseif ($a -eq "white")
    {"The colour is white"} else
    {"Another colour"}
    Оператор Switch
    Другой способ выполнять определенный участок кода в зависимости от заданных условий
    $a = "red" switch ($a)
    {
    "red" {"The colour is red"}
    "white"{"The colour is white"} default{"Another colour"}
    }

    Запись в простой файл
    Для простого текстового файла используйте Out-File или >
    $a = "Hello world"
    $a | out-file test.txt
    Или используйте > для вывода результатов работы сценария в простой текстовый файл
    .\test.ps1 > test.txt
    Чтение из файла
    Используйте Get-Content для создания массива строк. Затем выполните цикл по массиву
    $a = Get-Content "c:\servers.txt" foreach ($i in $a)
    {$i}
    Запись в файл HTML
    Используйте ConvertTo-Html и >
    $a = Get-Process
    $a | Convertto-Html -property Name,Path,Company > test.htm
    Запись в файл CSV
    Используйте Export-Csv и Select-Object для фильтрации выводимых данных
    $a = Get-Process
    $a| Select-Object Name,Path,Company | Export-Csv -path test.csv
    1   2   3   4


    написать администратору сайта