10 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Восстановление Windows 7 при помощи командной оболочки PowerShell 2.0

Содержание

SFC и DISM: Проверка и Восстановление системных файлов в Windows

Всякий раз, когда что-то идет не так с компьютером или ноутбуком, есть ряд инструментов для устранения неполадок, которые вы можете выполнить, чтобы попытаться устранить проблему. В Windows 10/8/7 есть несколько встроенных команд, которые можно использовать для проверки и восстановления поврежденных системных файлов, которые со временем вызывают проблемы при изменении. Одним из способов устранения неполадок, связанных с Windows, является проверка системы и восстановление системных файлов. Это может помочь во всех типах проблем, таких как медленная система, синий экран смерти, внезапные сбои питания и сбои системы.

Рассмотрим, как запустить средство проверки системных файлов в Windows с помощью командной строки CMD и PowerShell, таких команд как sfc /scannow и инструмента DISM. Хочу заметить, что для обновления Anniversary Update Windows 10, будет лучше использовать методы именно с PowerShell.

Проверка и Восстановление системных файлов через CMD

Средство проверки системных файлов сканирует ваш компьютер на предмет любого повреждения или изменений в системных файлах, которые в противном случае могли бы помешать нормальной работе вашего ПК. Оттуда он заменяет файл правильной версией, чтобы обеспечить бесперебойную работу. С помощью командной строки можно попытаться сканировать и восстановить системные файлы поздних операционных систем, как Windows 10/8/7 / Vista. Разберем две команды sfc /scannow и DISM с помощью CMD.

1. Использование инструмента System File Checker (SFC)

  • Запустите командную строку (CMD) от имени администратора. Нажмите «поиск» и напишите просто «cmd» или «командная строка», далее по ней правой кнопкой мыши и запуск от имени админа.

  • Задайте команду sfc /scannow и дождитесь окончания процесса.

Примечание: После сканирования вашей системы будет выдан один из трех результатов:

  • Ошибок системных файлов не будет.
  • Будут ошибки системных файлов и Windows восстановит их автоматически.
  • Windows обнаружила ошибки, но не может восстановить некоторые из них.

Если у вас показывает вариант 3, что ошибка обнаружена и система не может восстановить, то загрузитесь в безопасном режиме и проделайте заново процедуру. Советую отключить шифрование EFS и Bitlocker , если на момент проверки они имеются. Ничего не получилось? Двигаемся ниже.

2. Использование инструмента Deployment Image and Service Management (DISM)

Если вышеуказанное не работает в безопасном режиме, есть один последний способ проверить повреждение в системных файлах и исправить их. Используем инструмент Deployment Image and Service Management (DISM). Команда работает с системами Windows 8/8.1/10. Откройте обратно командную строку от имени администратора и используйте следующую команду:

DISM /ONLINE /CLEANUP-IMAGE /RESTOREHEALTH

Процесс может занять длительное время с зависанием процентной шкалы. Закончив работу, перезагрузите компьютер и запустите обратно sfc /scannow, чтобы убедиться, что ошибок нет или ошибка пропала.

Проверка и Восстановление системных файлов через PowerShell

Мы будем использовать Windows PowerShell, чтобы показать, как использовать службу обслуживания и управления DISM для сканирования и исправления поврежденных системных файлов в Windows 10. Этот способ будет более эффективный для обновления Anniversary windows 10, чем командная строка.

1. Использование инструмента System File Checker (SFC)

  • Запустите PowerShell от имени администратора. Нажмите «поиск» и наберите windows powershell, после нажмите правой кнопкой мыши и выберите от имени админа.

  • Задайте в окне PowerShell команду sfc /scannow. Если сканирование обнаружит какие-либо проблемы, Windows попытается их исправить. Если Windows не сможет их исправить, он предупредит вас, что необходимы дальнейшие исследования и действия. Двигайтесь ниже, если обнаружены ошибки.

2. Использование инструмента Deployment Image and Service Management (DISM)

Сканирование DISM обнаруживает поврежденные системные файлы и Windows попытается исправить их, и даст вам отчет о ходе работы в конце. Если Windows не сможет найти файлы, необходимые для восстановления поврежденных системных файлов, вам также будет предоставлена ​​информация о том, что делать дальше, со ссылкой на веб-сайт Microsoft и варианты устранения неполадок. Задайте ниже команду в окно PowerShell.

DISM /ONLINE /CLEANUP-IMAGE /RESTOREHEALTH

Если DISM все исправил или не выявил ошибки, то перезагрузите ноутбук, компьютер и запустите для проверки обратно sfc /scannow.

Установка PowerShell 7.0 в Windows

Корпорация Microsoft выпустила седьмую версию командной оболочки PowerShell. Посмотрим, как установить её в Windows.

PowerShell 7.0 доступен для следующих операционных систем:

  • Windows 7, 8.1 и 10;
  • Windows Server 2008 R2, 2012, 2012 R2, 2016 и 2019;
  • macOS 10.13 и новее;
  • Red Hat Enterprise Linux (RHEL) / CentOS 7 и новее;
  • Fedora 29 и новее;
  • Debian 9 и новее;
  • Ubuntu 16.04 и новее;
  • openSUSE 15 и новее;
  • Alpine Linux 3.8 и новее.

Новая версия PowerShell получила следующие возможности:

  • Поддержка распараллеливания каналов (pipeline) при помощи конструкции «ForEach-Object -Parallel»;
  • Оператор условного присвоения «a ? b : c»;
  • Операторы условного запуска потоков «||» и «&&» (например, cmd1 && cmd2, вторая команда будет выполнена только при успешном выполнении первой);
  • Логические операторы «??» и «??=», которые возвращают правый операнд, если левый операнд имеет значение NULL (например, a = b ?? «default string» если b равен null, оператор вернёт стоку со значением по умолчанию);
  • Улучшенная система динамического просмотра ошибок (Get-Error cmdl);
  • Прослойка для совместимости с модулями для Windows PowerShell;
  • Автоматический вывод уведомления о появлении новой версии;
  • Возможность вызова ресурсов DSC (Desired State Configuration) напрямую из PowerShell.

Скачать дистрибутивы и исходники можно по следующей ссылке.

Итак, добавим PowerShell 7.0 в Windows. Для пользователей Windows компания Microsoft приготовила MSI-пакеты. Один из которых мы и скачали по ссылке выше. Если Ваша версия Windows ниже десятой, то Вам ещё придётся предварительно скачать и установить универсальную среду выполнения C, иначе при установке PowerShell 7.0 столкнётесь с таким вот сообщением:

А для Windows 7 или Windows 2008 R2 понадобится ещё и Windows Management Framework (WMF) 4.0 или более поздней версии. Подробнее о WMF можно прочитать здесь.

По умолчанию PowerShell 7.0 устанавливается в C:Program FilesPowerShell, но каталог можно и изменить при установке.

Далее нам предложат следующее:

  • Добавить PowerShell в переменную среды Path;
  • Регистрировать манифест ведения журнала событий Windows;
  • Включить удалённое взаимодействие PowerShell во время установки;
  • Добавить пункт «Открыть в PowerShell» в контекстное меню проводника.

Отмечаем нужные пункты, нажимаем Next, далее Install и ждём завершения процесса установки.

Сама процедура установки довольно быстрая. Нажимаем Finish и ищем в меню Пуск новую командную оболочку.

И вот перед нами PowerShell 7.0.

Альтернативой графическому способу установки является установка через командную строку. Ниже пример команды для установки PowerShell 7.0 в 64-битной ОС Windows со всеми включенными параметрами установки:

  • ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL — добавить пункт «Открыть в PowerShell» в контекстное меню проводника;
  • ENABLE_PSREMOTING — включить удалённое взаимодействие PowerShell во время установки;
  • REGISTER_MANIFEST — регистрировать манифест ведения журнала событий Windows.

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

Оболочку на прокачку: советы по оптимизации команд и скриптов Powershell 2.0

Содержание статьи

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

Берем только нужное

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

Ведь каждый вызванный объект увеличивает количество памяти, требуемое для его хранения. Если взять больше, то в определенный момент получим ошибку «System. OutOfMemoryException». То есть сначала извлечь все параметры объекта и ненужные объекты, а затем отфильтровать то, что действительно необходимо, — плохая идея.

Использование лишних выборок существенно увеличивает время исполнения скрипта и повышает требования к системным ресурсам. Лучше сразу взять то, что планируется обрабатывать, или выводить дальше. Для примера проверь время исполнения двух команд:

PS> Get-Process | Where ($_.ProcessName -eq «explorer»)
PS> Get-Process explorer

Вторая выполнится примерно в два раза быстрее, а полученный результат будет одинаков.
В больших скриптах при большом количестве данных разница в скорости выполнения будет весьма ощутимой.

Читать еще:  Directx 9.0c для Windows XP

Теперь ситуация, которая не менее редка в сценариях PowerShell. Есть список объектов, и нужно произвести с ними некоторые действия.
Для этих целей используют командлет ForEach-Object (алиас foreach) или стандартный оператор foreach (поэтому их часто путают). Например, очень часто в скриптах извлекают параметры и присваивают их переменным, которые затем последовательно обрабатывают.

PS> $computers = Get-ADComputer
PS> foreach ($computer in $computers)

Этот пример можно переписать несколько иначе:

PS> Get-ADComputer | ForEach-Object

В первом случае мы вначале присваиваем значение переменной, а затем считываем.
Использование каналов (pipelines, «|») и командлета ForEach-Object во втором примере позволит избежать избыточного хранения большого количества данных, так как они будут обрабатываться сразу, по мере поступления.

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

PS> import-module ActiveDirectory

Аналогичная ситуация, только не используется явно заданная переменная:

PS> foreach ($computer in GetADComputer)

Здесь все равно вначале извлекаются все команды, которые сохраняются в переменной (что загружена в память) и затем последовательно выполняются элементы. Однако время работы команды и затраты ресурсов будут все же на порядок больше, чем при использовании каналов. Но не все так гладко. На простых примерах можно прийти к выводу, что от использования оператора foreach лучше отказаться, на самом деле внутренняя оптимизация PS иногда приводит к тому, что в операциях чтения foreach показывает лучшую производительность. Кроме этого, foreach предпочтителен, если объект уже имеется в памяти, например сохранен в переменной, то есть нет нужды его извлекать, а надо просто обработать. В некоторых случаях необходимо получить некоторые свойства и обработать их дважды, но по-разному, или сохранить в файл и просмотреть в консоли. Можно конечно, вызвать команду дважды (будь внимателен, например Get-Process, вызванный дважды, покажет разный результат), или сохранить значение в переменной. Но в PS есть еще одна интересная возможность: направить вывод в два потока.

Для этой цели используется командлет TeeObject. Например, получаем список процессов, сохраняем в файл и выводем на консоль:

PS> Get-Process | Tee-Object
-filepath C:process.txt

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

PS> Get-Process | Tee-Object -filepath C:process.txt |
Sort-Object cpu

Чтобы сохранить второй поток в файл, используем командлет Out-File:

PS> Get-Process | Tee-Object -filepath C:process.txt |
Sort-Object cpu | Out-File C:process-sort.txt

В качестве входного параметра командлет Tee-Object может принимать другой объект, на который следует указать при помощи ключа «-inputObject».

Читаем файлы

Для чтения или разбора файлов используются командлеты GetContent, Select-String, которые проходят файл построчно и возвращают объект. С файлами большого размера могут быть проблемы, но их легко решить, используя дополнительные параметры. Например, в Get-Content можно указать количество строк, считываемых за раз и передаваемых далее по конвейеру (по умолчанию все). Например, по 100 строк:

PS> Get-Content С:system.log -Read 100

Соответственно увеличение этого числа ускоряет процесс чтения, но и увеличивает необходимые объемы памяти. Причем при использовании Read, скорее всего, потребуется вставка конвейера «| ForEach-Object ($_) |», чтобы в последующем возможно было обработать всю запись. К слову, команда:

PS> Get-Content biglogfile.log -read 1000 | ForEachObject <$_>| Where

выполнится примерно в 3 раза быстрее, чем:

PS> Get-Content biglogfile.log | Where

Командлет Get-Content лишь читает файлы, остальная обработка отдана на откуп другим командлетам. Например, Select-String может читать файлы или брать данные из канала, отбирая информацию по шаблону. Например, переберем все скрипты PS в текущем каталоге в поисках подстроки «PowerShell»:

PS> Select-String -path *.ps1 -pattern «PowerShell»

Для примера просмотри вывод, казалось бы, подобной команды:

PS> Get-Content -path *.ps1 | where

Главное отличие — отсутствие имени файла в выводе результата при использовании where, ведь в этом случае выводятся только совпадения, а не объекты. По умолчанию ищутся все вхождения образца, но в некоторых случаях необходимо найти все строки, где образец отсутствует.

Например, вместо того, чтобы искать все сообщения об ошибках, предупреждения (Warning, Failed и т.п.), проще убрать из вывода Success.

При помощи дополнительного параметра Select-String «–notMatch» это сделать проще, а скрипт будет работать быстрее:

PS> Select-String «Success» *.log –notMatch

Одна строчка в выводе часто не дает достаточно информации о событии, здесь на помощь приходит параметр «–context», который позволяет получить необходимое количество строк до и после совпадения. Например, выведем две строки из журналов до и после события со статусом Failed:

PS> Select-String «Failed» *.log -content 2

По умолчанию поиск регистронезависим, чтобы научить Select-String понимать регистр, используем «-caseSensitive».
В некоторых обзорах, в том числе и написанных сертифицированными Microsoft, командлет SelectString часто сравнивается с юниксовыми утилитами grep/egrep. Благо, реализаций grep для Windows сегодня более чем предостаточно:

По результатам прогонов grep существенно выигрывает по скорости выполнения у Select-String.

> grep Warning *.log

Но при его использовании дальнейшую обработку данных необходимо производить самостоятельно, ведь на выходе мы получаем «сырые» данные, а не объекты .Net. Если же в этом нет необходимости, то вполне достаточно использовать и grep. Напомню, что в Windows есть утилита findstr.exe, позволяющая находить нужные строки в файлах, но ее функционал жутко урезан, поэтому использование grep предпочтительнее.

В контексте чтения файлов стоит вспомнить и о массивах. В PS вообще упрощена работа с переменными, строками, массивами и хеш-таблицами, нужный тип присваивается автоматически (проверяется GetType().

FullName), размер устанавливается динамически. В итоге работать с ними удобно, нет необходимости в дополнительных проверках.
Но при обработке больших объемов данных вроде бы простой скрипт начинает заметно тормозить. Все дело в том, что при добавлении новых элементов в массив он перестраивается, на что опять же нужны время и ресурсы. Поэтому, если размеры массива известны заранее, то его лучше задать сразу, что ускорит в последующем работу с ним:

PS> $arr = New-Object string[] 300

Проверяем параметры массива:

Для примера код:

$arr = new-object int[] 1000
for ($i=0; $i –lt 1000; $i++)

выполнится более чем в 10 раз быстрее, по сравнению с:

Выражаемся регулярно

В PS реализован механизм Perl-подобных регулярных выражений, что позволяет при необходимости легко найти иголку в стоге сена. Если быть точнее, то PS является оболочкой и использует все, что заложено в технологии .NET Framework (класс System.Text.RegularExpressions.Regex). Для поиска совпадения используется параметр «-match» и его варианты «–cmatch» (case-sensitive, регистрозависимый) и «-imatch» (case insensitive, регистронезависимый). Например, нам нужен список IP-адресов, полученных при помощи ipconfig. Проще простого:

В качестве параметра в PS принимается регулярное выражение, которое может содержать все принятые знаки — *, ?, +, w, s, d и так далее. Проверим правильность почтового адреса:

PS> $regex = «^[a-z]+.[a-z]+@synack.ru$»
> If ($email –notmatch $regex) <
> Write-Error «Invalid e-mail address $email»
>>

Теперь, если почтовый адрес не принадлежит домену synack.ru и не попадает под шаблон (то есть содержит запрещенные знаки), то пользователь получит сообщение об ошибке (о командлете Write-Error читай в мини-статье «Форматируем вывод»).

Не буду останавливаться на подробном разборе и перечислении всех возможных параметров, используемых в регулярных выражениях, это достаточно емкая тема (см. статью «Регулярные выражения Perl» www.xakep.ru/post/19474). Кстати, на сегодня доступны специальные утилиты, помогающие составлять регулярное выражение под требуемую оболочку. Например, RegexBuddy (regexbuddy.com/powershell.html) или RegexMagic (regexmagic.com). Кроме поиска совпадения, в PS реализована еще одна ценная возможность — замена содержимого по шаблону, для чего используется оператор «-replace» (а также «-ireplace» и «-creplace»). Шаблон для замены выглядит так:

Например, прочитаем файл и заменим все строки «Warning», на «. Warning»:

PS> Get-Content -path system.log | foreach

Если второй параметр не указан, совпавшая запись будет просто удалена. Как и в Perl, захваченные в первой части выражения символы сохраняются в специальных переменных, которые могут быть использованы при замене. Так $0 соответствует всему совпавшему тексту, $1 — первое совпадение, $2 — второе и так далее. То есть предыдущее выражение можно переписать так:

PS> Get-Content -path system.log | foreach

Цигиль-цигиль

Теперь, собственно, как и при помощи чего проверять эффективность написанного скрипта. Разработчики Microsoft не стали усложнять нам жизнь, и в PS из коробки включен специальный командлет Measure-Command, позволяющий замерить время выполнения команды или скрипта.

Из командной строки PS реализован прямой доступ к командам оболочки CMD, объектам COM, WMI и .NET, поэтому очень удобно определять разницу во времени исполнения самых разных утилит. Просто вводим запрос в строке приглашения. Для примера произведем два замера:

PS> Measure-Command
TotalMilliseconds: 7912,7428
PS> Measure-Command
TotalMilliseconds: 1248,9875

Отсюда видно, что нэйтивные команды в PS выполняются значительно быстрее.

Заключение

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

Links

  • Официальные ресурсы, посвященные PowerShell — microsoft.com/powershell, blogs.msdn.com/PowerShell
  • Специализированные ресурсы — powershellcommunity.org, pwrshell.net, powershelltools.com, powershell.wik.is.
  • Пакет Unix утилит для Windows — gnuwin32.sf.net
  • Статья «Регулярные выражения Perl». — www.xakep.ru/post/19474

Форматируем вывод

При большом количестве данных их визуальный анализ становится затруднительным: например, очень трудно найти сообщения об ошибке во множестве записей. Но в PS довольно просто выделить вывод цветом, что удобнее для восприятия. Для этого используется командлет Write-Host, которому в качестве параметра передаем два параметра:

цвет фона (-Backgroundcolor) и цвет текста (-Foregroundcolor).
PS> Get-Process | Write-Host -foregroundcolor DarkGreen -backgroundcolor white

Читать еще:  Как отключить автоматическое обслуживание в Windows 8.1 и 10

В результате получим список процессов на белом фоне зелеными буквами. К сожалению, Write-Host никак не различает вывод других утилит. То есть если в выводе другого командлета присутствует, например Error, о цветовой раскраске такого сообщения необходимо позаботиться самостоятельно.

Работа с журналами сообщений

После настройки систем и сервисов роль админа сводится к наблюдению за их правильной работой и отслеживанию текущих параметров. В PS заложен целый ряд *-Eventlog командлетов, позволяющих легко считать записи в журнале событий как на локальной, так и удаленной системе. Данные легко сортируются и отбираются по нужным критериям. Например, чтобы вывести только последние события из журнала безопасности на двух компьютерах, используем параметр «Nevest» с указанием числового аргумента:

PS> Get-Eventlog Security -Nevest 20 -computername localhost, synack.ru

Теперь выведем только события, имеющие определенный статус:

PS> Get-Eventlog Security -Message «*failed*»

А вот так можно собрать все данные об успешной регистрации пользователей (события с EventID=4624):

PS> Get-Eventlog Security | Where-Object

Логокопатель Windows

В PS v2.0 CTP3 появился командлет Get-WinEvent, который в некоторых случаях предоставляет более удобный формат доступа к данным. Получим список провайдеров, отвечающих за обновления:

PS> Get-WinEvent -ListProvider *update*

В зависимости от установленных ролей и компонентов, список будет разным, но нас интересует провайдер для Windows Update. Теперь смотрим установленные обновления:

PS> $provider = Get-WinEvent -ListProvider
Microsoft-Windows-WindowsUpdateClient
PS> $provider.events | ? <$_.description -match "success">| select id,description | ft -AutoSize

В итоге мы можем достаточно просто получить любую информацию о состоянии системы.

Заменяем командную строку на PowerShell в Windows 10

Те, то уже пользовались PowerShell знают, что она почти тоже самое, что и командная строка, только с большими возможностями. Подробнее о PowerShell читаем здесь.

Итак, когда мы нажимаем на меню Win+X, его еще называют меню WinX, там появляются различные пункты работы с системой. Также там есть и командная строка, которую мы можем открыть, как от имени пользователя, так и от имени администратора. Но что, если заменить ее на другую утилиту, скажем подобную, которая имеет название PowerShell?

Как заменить командную строку на PowerShell?

Давайте перейдем в параметры системы, для этого нажимаем Win+I, либо перейдем туда из меню Пуск. После открытия окна нажимаем на «Персонализация».

Слева переходим в пункт «Панель задач». При отображении новых элементов справа, мы должны поставить там во включенное положение пункт «Заменить командную строку оболочкой Windows PowerShell в меню…».

Далее вы можете нажать комбинацию Win+X и увидеть, что наши параметры уже работают.

Второй способ – файл bat

Ребята, можно изменить командную строку на PowerShell с помощью реестра. Открываем реестр с помощью Win+R и вводим туда команду regedit. Потом идем вот в такой раздел:

HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorerAdvanced

Там находим параметр DontUsePowerShellOnWinX. Если его значение равно – будет показываться PowerShell, если значение 1 – это командная строка.

Замена командной строки на PowerShell – https://yadi.sk/d/uzXkQi2DzWgyN

Замена PowerShell на командную строку – https://yadi.sk/d/RpL4ECxdzWh5Z

Чтобы впервые запустить данный файл понадобится в открывшемся окне нажать кнопку «Подробнее», а потом «Выполнить в любом случае».

Таким образом, вы моете заменять командную строку на оболочку PowerShell и наоборот.

Как работать с утилитой Windows PowerShell

Опытные пользователи операционной системы Windows 10 могли слышать об утилите командной строки PowerShell. Также с ней могут быть знакомы имеющие опыт работы с Windows 7 и 8.1. После многих лет использования приложения командной строки Windows и файлов формата .bat пришло время познакомиться с более функциональным инструментом.

PowerShell является ценным пополнением списка инструментов Windows и его масштаб может отпугнуть некоторых пользователей. Что это — скриптовый язык или командная оболочка? Не стоит беспокоиться: несмотря на обширные возможности, освоить PowerShell по силам каждому.

Шаг 1: установка

Для начала нам необходима сама утилита PowerShell. Если вы работаете с Windows 10, у вас уже установлена версия PowerShell 5. Обновление Windows 10 Anniversary Update использует версию 5.1, но разница незаметна. В Windows 8 и 8.1 применяется PowerShell 4, чего тоже вполне достаточно. Установка PowerShell на Windows 7 не доставит проблем, но всё же пару лишних шагов придется сделать. В частности, нужно дополнительно установить .Net Framework. Можно установить Windows Management Framework, в состав которого входит PowerShell.

У PowerShell есть два интерфейса. Опытные пользователи могут выбрать полноценный графический интерфейс, известный как Integrated Scripting Environment (ISE). Новичкам лучше использовать консоль PowerShell, простой текстовый интерфейс в стиле командной строки Windows или даже DOS 3.2.

Для запуска PowerShell от имени администратора в Windows 10 нажмите на кнопку «Пуск» и прокрутите список приложений до Windows PowerShell. В Windows 8.1 ищите Windows PowerShell в папке System в Windows. В Windows 7 оболочка располагается в папке Accessories. В качестве обычного пользователя PowerShell можно запустить точно так же, используя левую кнопку мыши вместо правой.

В любой версии Windows можно применить поиск. Для удобства дальнейшего использования можно закрепить PowerShell на панели задач.

Шаг 2: старые команды Windows

Синтаксис команд Windows в PowerShell работает привычным образом. Например, cd меняет папки, dir показывает список всех файлов и папок внутри текущей папки.

В зависимости от метода запуска консоли PowerShell можно начать в c:Windowssystem32 или в c:Users . В примере на скриншоте используется команда cd .. (с пробелом) для перехода на один уровень вверх за раз, затем запускается команда dir для отображения списка файлов и папок в директории C:.

Шаг 3: установка файлов помощи

Команды вроде cd и dir не являются активными командами оболочки PowerShell. Это так называемые псевдонимы (aliases) — замены настоящих команд PowerShell. Псевдонимы удобны для тех, кто имеет большой опыт работы с командной строкой. Однако они не затрагивают глубин PowerShell.

Чтобы начать знакомиться с возможностями PowerShell, наберите help и нужную вам команду. На скриншоте показана команда help dir.

Команда help говорит, что dir является псевдонимом команды PowerShell Get-ChildItem. Если набрать get-childitem в PS C:>, увидите то же самое, что и при использовании команды dir.

Как указано внизу скриншота, файлы помощи для PowerShell не устанавливаются автоматически. Для их получения запустите PowerShell от имени администратора и наберите update-help. Установка файлов помощи займёт несколько минут, ряд модулей могут отсутствовать — например, в данном случае не установились Help for NetWNV и SecureBoot. Когда всё готово, полная система помощи всегда будет давать нужные подсказки.

Теперь наберите команду get-help и любую интересующую вас команду («cmdlet» на языке PowerShell, по-русски командлеты), будет показано её описание. Например, get-help get-childitem выдаёт список опций get-childitem. Также можно вывести разные возможные варианты. Например

get-help get-childitem -examples

выдает семь подробных примеров использования get-childitem. Команда

get-help get-childitem -detailed

включает в себя эти семь примеров и подробные разъяснения каждого параметра в командлете get-childitem.

Шаг 4: получение помощи по параметрам

На скриншоте help dir вы могли заметить два списка под SYNTAX для get-childitem. Наличие двух разных синтаксисов означает возможность применения двух способов запуска командлет. Как держать синтаксис отдельно друг от друга и что означают параметры? Ответ простой, если знать трюк.

Для получения подробностей относительно параметров командлеты get-childitem или любой другой используйте параметр -full:

get-help get-childitem -full

Это выдает список того, что вы можете сделать с командлетой и что случится. Смотрите на скриншот.

Просмотр описания параметров позволяет заметить, что get-childitem даёт возможность получить объект child (вроде названия подпапки или имени файла) в указанном месте, с совпадением определённых символов или без. Например:

get-childItem “*.txt” -recurse

возвращает список файлов «*.txt» в текущей папке и всех подпапках (из-за параметра -recurse). Тогда как

возвращает список всех ключей реестра верхнего уровня в HKEY_LOCAL_MACHINESoftware.

Если вы когда-нибудь пытались попасть в реестр при помощи командной строки Windows или файлов .bat, вы сможете оценить функциональность этого варианта доступа.

Шаг 5: изучение имён

Есть причина того, почему показанные до сих пор командлеты выглядят сходным образом: get-childitem, update-help, get-help используют единую схему глагол-существительное. Это соглашение применяют все командлеты PowerShell, в них глагол стоит перед единственным существительным. Это понравится тем, кто в своё время пострадал от непостоянства названий команд в языках VB и VBA.

Взгляните на самые распространенные командлеты:

set-location: устанавливает текущую рабочий локацию на определённую локацию

get-content: получает содержимое файла

get-item: получает файлы и папки

copy-item: копирует объект из одной локации в другую

remove-item: удаляет файлы и папки

get-process: получает процессы, запущенные на локальном или удаленном компьютере

get-service: получает сервисы, запущенные на локальном или удаленном компьютере

invoke-webrequest: получает содержимое с веб-страницы в интернете

Для просмотра работы определённой командлеты используйте get-help как в случае

get-help copy-item -full

На основе описания в помощи можно понять, что необходимо командлете. Например, если вы хотите копировать все файлы и папки из Documents в c:temp, используйте

copy-item c:users[username] documents* c:temp

Введя эту команду, вы увидите несколько интересных возможностей окружения PowerShell. Например, если набрать copy-i и нажать кнопку Tab, PowerShell заполнит Copy-Item. Если неправильно набрать командлету и PowerShell не может распознать её, даётся полное описание того, что было сделано не так.

Попробуйте данную командлету:

Вы получите краткий список заголовков, изображений, ссылок и прочего содержимого веб-страницы. Обратите внимание в get-help на список invoke-webrequest, который «возвращает коллекцию форм, ссылок, изображений и прочие важные элементы HTML» — именно то, что должно показываться на экране.

Некоторые командлеты помогают управлять самим PowerShell:

get-command: список всех доступных командлет

Читать еще:  Переменные в Windows PowerShell 2.0

get-verb: список всех доступных глаголов

clear-host: очистка экрана программы-хоста

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

Будут показаны все глаголы, доступные с существительным service. Вот их список:

Можно объединять эти командлеты с другими.

Шаг 6: использование труб

Если вы знакомы с командной строкой Windows или пакетными файлами, то знаете о перенаправлении и трубах. Перенаправление (символ >) и трубы (символ |) берут результат действия и прикрепляют его в другое место. Например, можно перенаправить результат команды dir в текстовый файл или передать результат команды ping в команду find для фильтрования интересных результатов, вроде

ping askwoody.com | find “packets” > temp2.txt

Здесь во второй команде find ищет строку packets, взятую из адреса askwoody.com командой ping и объединяет все совпадающие строки в файл под названием temp2.txt.

Первая из этих команд отлично работает в PowerShell. Для запуска второй команды потребуется нечто вроде

ping askwoody.com | select-string packets | out-file temp2.txt

Использования перенаправления и труб значительно расширяет возможности командной строки Windows: вместо бесконечного прокручивания вниз по экрану в поиске текстовой строки можно отфильтровывать нужные команды Windows.

Powershell обладает поддержкой pipe, причём она не ограничена текстом. PowerShell позволяет передавать целый объект из одной командлеты в другую, где объект представляет собой комбинацию данных (называемых свойствами) и действий (методов), которые могут использовать эти данные.

Сложная часть начинается при выстраивании объектов. Поставляемые одним командлетом объекты должны совпадать с типом объектов, принимаемых получающим командлетом. Текст является весьма простым типом объектов, так что если вы работаете с текстом, выравнивание объектов является простой задачей. Остальные объекты не такие элементарные.

Как это понять? Используйте командлету get-member. Если вы хотите знать, какой тип объекта обрабатывает командлета, проведите её через get-member. Например, если вы пытаетесь понять запущенные на компьютере процессы и сузили опции до командлеты get-process, вот как узнать результат командлеты:

Запуск этой командлеты выдаёт длинный список свойств и методов для get-process, но в самом начале списка можно увидеть тип объекта, который создает get-process:

Нижеприведенный скриншот также показывает свойства get-process под названием get-process Handles, Name, NPM, PM, SI, VM и WS.

Если вы хотите манипулировать результатом get-process для работы с этим командлетом (вместо отображения длинного списка активных процессов на мониторе), нужно найти другую команду, которая в качестве вводных данных принимает System.Diagnostics.Process. Для поиска нужной командлеты снова используйте возможности PowerShell:

get-command -Parametertype System.Diagnostics.Process

Эта командлета выдает список командлет, которые могут обрабатывать System.Diagnostics.Process.

Некоторые командлеты известны тем, что принимают почти любой вид данных. Главной среди них является where-object. Эта командлета пропускает через себя каждый посылаемый по трубе объект, один за одним, и применяет к нему заданной критерии выбора. Существует специальный маркер под названием $_, который позволяет использовать каждый предмет в трубе, один за раз.

Допустим, вы хотите получить список всех запущенных на компьютере процессов с названием «svchost», то есть хотите сопоставить свойство Name процессу svchost. Используйте команду:

Командлета where-object смотрит на каждый объект System.Diagnostics.Process, сравнивает .Name этого объекта с «svchost»; если есть совпадения, они выдаются на монитор. Смотрите на скриншот.

Шаг 7: анализ полезных команд PowerShell

К настоящему времени вы уже знаете достаточно много, чтобы суметь нанести урон компьютеру, так что будьте осторожны. Посмотрим, например, часто запрашиваемые команды PowerShell.

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

Если запустить эту команду, игнорируйте обозначенные красным цветом предупреждения, и когда команда выполнена, перезагрузите компьютер; все предустановленные программы в Windows 10 появятся на своих местах.

Вот как работает данная команда. Get-AppXPackage проверяет все пакеты приложений в профиле пользователя. Даже если вы удалили приложение, оно остается в списке профиля пользователя.

Командлета Get-AppXPackage возвращает объект TypeName Microsoft.Windows.Appx.PackageManager.Commands.AppxPackage, который включает в себя полное имя пакета приложения и местонахождения соответствующего файла манифеста XML. Если запустить командлету get-appxpackage, вы увидите длинный список пакетов приложений. Скриншот показывает описание приложения Xbox.

Командлета Foreach посредством цикла проходит через каждый объект в AppXPackage, отправляя их командлету Add-AppxPackage. Согласно get-help для Add-AppxPackage, тут есть два ключевых переключателя:

  • Переключатель -Register используется для регистрации существующих установок пакетов приложений, можно задать параметры DisableDevelopmentMode и Register
  • Переключатель -DisableDevelopmentMode говорит Windows заново зарегистрировать существующий пакет приложения, который был отключён, не зарегистрирован или повреждён.

Строка «$($_.InstallLocation)AppXManifest.xml» описывает, где расположен файл manifest.xml. Если посмотреть на файлы AppXManifest.xml, вы увидите сложный список идентификаторов приложений, исполняемых файлов и большое количество визуальных элементов, связанных с приложением.

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

Управление восстановлением системы с помощью PowerShell

Создание и просмотр точек восстановления и отмена с помощью команд

Дебют функции восстановления в Windows XP стал радостным событием. Я называю эту функцию «сывороткой правды компонентов Windows», поскольку она часто выявляет то, что скрывают пользователи. Например, одна сотрудница как-то пожаловалась мне, что ее рабочая станция не запускается. На вопрос, не устанавливалось ли что-нибудь недавно, она ответила, что установила новую версию антивирусной программы. «Сколько раз вы ее устанавливали?» – спросил я, и получил ответ: «Только один». Однако при загрузке с диска восстановления и при попытке отмены последнего установленного приложения функция восстановления выявила 20 попыток установки антивирусного программного обеспечения! Конечно, эта функция не решит всех проблем, но всегда полезна.

Однако графический интерфейс функции восстановления мне никогда не нравился. К счастью, существует пять команд PowerShell:

  • Enable-ComputerRestore и Disable-ComputerRestore для включения и выключения функции восстановления для данного диска.
  • Checkpoint-Computer для создания новой функции восстановления.
  • Get-ComputerRestorePoint для вывода всех доступных точек восстановления.
  • Restore-Computer для выполнения отмены изменений системы к конкретной точке восстановления.

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

Включение и выключение восстановления системы

С помощью Enable-ComputerRestore и Disable-ComputerRestore можно выбрать диски, защищаемые функцией восстановления. Синтаксис прост и точен: список разделенных запятой дисков, каждый из которых записан как корневой каталог, заключенный в кавычки:

Для всех отсутствующих в списке дисков функция восстановления системы отключается, поэтому если диск E ранее был защищен, то после выполнения этой команды защита будет выключена. Кроме того, команд для настройки функции восстановления системы, по-видимому, не существует. Допустимые рамки управления ограничиваются тем, что можно сделать в панели управления, хотя редактирование записей в подразделе реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSystemRestore позволяет выполнить всю необходимую настройку.

Просмотр имеющихся точек восстановления

Прежде чем выполнять отмену внесенных в систему изменений, необходимо узнать, какие есть точки восстановления. Наиболее простая форма Get-ComputerRestorePoint выглядит так:

В сокращенном варианте выходные данные моей системы выглядят следующим образом:

Здесь обратите внимание на значение SequenceNumber (порядковый номер), используемое для указания нужной точки восстановления. С помощью параметра -LastStatus команда Get-ComputerRestorePoint также позволяет вывести конечное состояние предыдущей операции восстановления системы:

Результатом выполнения этой команды является текстовое сообщение, например: «Данные компьютера были восстановлены до указанной точки восстановления». Это сообщение содержит лишь сведения о результате предыдущей попытки отмены изменений. Может показаться, что это информация о только что выполненной операции, однако это не так.

Выполнение отмены изменений системы

Выбрав нужную точку восстановления, выполняем отмену с помощью команды

В моем примере команда отмены изменений к последней точке восстановления выглядит так:

Если вы уверены, что восстанавливать систему нужно по самой последней точке восстановления, то можно воспользоваться комбинацией команд Get-ComputerRestorePoint и Restore-Computer:

Тем, у кого нет большого опыта работы с массивами PowerShell, запись [-1] может показаться непонятной. Если оставить только то, что находится в круглых скобках, то результатом будет выдача самого последнего порядкового номера. В моем примере это выглядит так:

Содержимое круглых скобок, то есть Get-ComputerRestorePoint, просто собирает все выходные данные команды. В моем случае система вернула три точки восстановления. Запись в квадратных скобках позволяет указать, которую из трех точек следует выбрать: для выбора первой точки указываем [0], второй – [1], третьей – [2].

Однако хотелось бы иметь универсальный способ выбора самой последней точки восстановления, то есть точки с наибольшим номером массива. В моем примере это – [2], а в случае 46 точек восстановления – [45]. Запись [-1] означает выбор самого последнего элемента массива. Мы уже убедились, что каждая точка восстановления имеет несколько свойств, включая время создания (CreationTime), описание (Description) и порядковый номер (SequenceNumber). Параметр -RestorePoint требует лишь указания числового значения порядкового номера (SequenceNumber), и добавление. sequencenumber возвращает только это значение.

Заметим, что Restore-Computer не выдает запроса на подтверждение выполнения. Чтобы выдавался запрос, добавьте -confirm:$true.

Создание новой точки восстановления системы

Иногда требуется программным путем заставить функцию восстановления системы создать новую точку восстановления – например, если устанавливается подозрительный новый драйвер или обновление Windows. В таких случаях полезно подготовить удобный путь отмены изменений. Новая точка восстановления создается с помощью команды Checkpoint-Computer, для которой через пробел необходимо указать описательное имя, заключаемое в кавычки:

Опробуйте эти команды, я уверен, что они займут достойное место в вашем инструментарии.

Поделитесь материалом с коллегами и друзьями

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector
×
×