Кто не хотел бы стать волшебником и произнести несколько слов, чтобы творить волшебные вещи? Что ж, мы не можем показать вам, как быть волшебниками, но мы можем показать вам, как творить небольшое компьютерное волшебство.
Если у вас есть компьютер с ОС Windows 7, значит, у вас есть PowerShell. Кроме того, если у вас есть компьютер с Windows 7, обновите его в целях безопасности.
Но эта статья предназначена не только для пользователей Windows. Последняя версия PowerShell бесплатна, ее можно установить и использовать на компьютерах Mac и Linux.
Это важно, поскольку все, что вы узнаете о PowerShell, теперь можно использовать практически на любом компьютере. Кто знает? Вы можете поднять этот навык на новый уровень и сделать карьеру в сфере информационных технологий.
Что такое PowerShell?
Высокотехнологичный ответ Microsoft заключается в том, что это «… оболочка командной строки, разработанная специально для системных администраторов». Звучит устрашающе. Но это не так. Вы заботитесь о своем компьютере? Да, тогда вы системный администратор в своем доме.
Указываете ли вы своему компьютеру, что делать с помощью щелчков мышью и нажатий клавиш? Да, поэтому воспринимайте оболочку командной строки как просто еще одно окно, в которое вы вводите данные, чтобы сообщить компьютеру, что делать. Вы можете это сделать.
PowerShell похож на язык программирования, но не такой загадочный, как большинство других. Он действительно читается как обычный английский, к чему стремилась Microsoft, чтобы его могли освоить непрограммисты.
Это способ написать несколько строк команд, называемый сценарием, чтобы заставить операционную систему Windows делать то, что вы от нее хотите. Затем вы можете сохранить эти строки в файле и запустить его одним щелчком мыши или запланировать его периодический запуск.
Что можно делать с помощью PowerShell?
Основная задача PowerShell — возможность автоматизировать задачи, чтобы вам не приходилось тратить время на повторяющиеся рутинные дела. Для профессионального системного администратора это может быть что-то вроде создания новых пользователей, генерации для них паролей и отправки электронного письма с подробной информацией своему новому руководителю.
Выполняемый вручную, с помощью щелчков мышью и набора текста, этот процесс может занять от 5 минут до часа и более. При наличии правильных сценариев системному администратору, возможно, даже не придется делать ничего из этого..
Но вы хотите знать, что можно делать с PowerShell дома. Практически все, что вам не нравится делать снова и снова. Используйте его, чтобы освободить место на жестком диске, удалив ненужные временные файлы и файлы журналов.
Введите комендантский час на компьютере вашего ребенка. Переименуйте или систематизируйте кучу файлов. В этом прелесть PowerShell. Практически все, что вы можете сделать на своем компьютере, можно создать с помощью сценария PowerShell, который можно автоматизировать и запускать одним щелчком мыши или по расписанию.
Как использовать PowerShell?
Проще всего работать с PowerShell в Интегрированной среде сценариев PowerShell (ISE) . Вы можете найти его, нажав «Пуск» и введя powershell ise в строку поиска в Windows 10. Вы должны увидеть его, как показано ниже.
В первый раз, когда мы используем его, мы собираемся запустить его от имени администратора. Для этого вам сначала необходимо иметь права администратора на вашем компьютере. В меню «Пуск» щелкните правой кнопкой мыши PowerShell ISE , затем выберите Запуск от имени администратора .
Вы можете увидеть всплывающее окно с предупреждением UserAccess Control (UAC) с вопросом, уверены ли вы, что хотите это сделать. Нажмите Да .
Теперь вы смотрите на PowerShell IDE. Верхняя панель окна (1) — это панель сценариев. Здесь вы будете писать свой сценарий. Нижняя панель окна (2) — это область консоли. Когда вы протестируете свой скрипт, вы увидите результат на этой панели.
Здесь вы также увидите сообщения об ошибках и тому подобное, что поможет вам исправить и улучшить ваши скрипты. Панель в правой части окна (3) представляет собой надстройку команды. Думайте об этом как о словаре всех доступных вам команд PowerShell.
PowerShell не запускает никаких сценариев, кроме тех, которые уже являются частью Windows. Вам нужно будет изменить его, чтобы вы могли запускать свои собственные скрипты.
В окне сценариев скопируйте и вставьте следующее:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Часть Set-ExecutionPolicy называется командлетом (произносится как командлет). Командлеты — мощные вещи. Думайте о них как о коротких командах, которые вы можете дать Windows, и Windows выполнит множество более сложных действий, чтобы удовлетворить вашу команду..
Аналогия может быть повелением ребенку убрать в своей комнате. Коротко и по делу. Если ваш ребенок хорошо разбирается в уборке комнаты, он пойдет и застелит постель, положит белье в корзину, отложит игрушки и книги на полку и, возможно, даже пропылесосит пол. Они понимают, что все это имел в виду командлет Clean-YourRoom.
В верхней части окна вы увидите зеленую стрелку. Нажмите на нее, чтобы запустить команду.
Часть -ExecutionPolicy сообщает Set-ExecutionPolicy , какую политику установить. Это параметр. Он говорит: «Я хочу, чтобы вы работали в рамках этих принципов и делали именно это. Он сообщает ему использовать определенную политику RemoteSigned.
Политика RemoteSigned гласит, что PowerShell не может выполнять любые сценарии, загруженные из Интернета, если они не подписаны доверенным издателем.
Окольным путем он сообщает PowerShell, что можно запускать любой скрипт, созданный локально, поскольку он не требует подписи удаленного доверенного издателя. Теперь ваш сценарий PowerShell сможет запускать любой сценарий, который вы напишете на своем компьютере.
Давайте рассмотрим скрипт для удаления временных файлов. Он не такой мощный и тщательный, как CCleaner, но у CCleaner есть свой набор проблем.
Используйте PowerShell, чтобы освободить место на жестком диске
Мы разберем этот сценарий построчно, чтобы вы могли увидеть, как он работает. В конце скрипт будет показан полностью, и вы сможете его скопировать и вставить, если захотите.
$TempFileLocation = "C:\Users\username\Appdata\Local\Temp\*"
Все, что стоит перед знаком доллара, является именем переменной. Думайте об этом как о кошельке, в который можно положить ценные вещи. Кошелек напоминает нам знак доллара, ценности звучат как переменная, поэтому мы тоже это запомним. Мы создаем кошелек или переменную с именем $TempFileLocation . Знак равенства указывает PowerShell, что поместить в эту переменную.
В данном случае мы указываем местоположение временных файлов Windows — C:\Users\username\AppData\Local\Temp\* . Мы делаем это по двум причинам; это место, из которого всегда безопасно удалять файлы, и мы собираемся использовать его, чтобы сообщить PowerShell, куда ему следует идти для удаления файлов.
Там, где написано имя пользователя, замените его на свое имя пользователя. Это имя пользователя, которое вы используете для входа в систему..на ваш компьютер. Звездочка (*) в конце является подстановочным знаком. Он представляет собой все, что находится в папке Temp, потому что все в папке Temp является временным, и мы хотим его удалить.
Двойные кавычки вокруг местоположения также важны. Это сообщает PowerShell, что там находится строка. Думайте о строке как о строке букв и символов. Если бы это были обычные числа, мы бы не использовали кавычки.
$TempFile = Get-ChildItem $TempFileLocation -Recurse
Мы создаем еще одну переменную. На этот раз мы воспользуемся командой, чтобы придумать, что поместить в переменную $TempFile .
Get-ChildItem
Еще одна вещь, которую вы заметите в таких командлетах, как Get-ChildItem , это то, что они полностью читабельны. Видите, первое слово — это глагол? Все командлеты начинаются со слов действия, поэтому вы сразу поймете, что они делают. ChildItem — это два существительных.
Вторая часть командлета всегда сообщает нам, к чему PowerShell будет применять действие. ChildItem означает всех дочерних элементов родительского местоположения. Это все равно, что сказать: получить все файлы в папке, где файлы являются дочерними, а папка — родительской.
Какой командлет получает дочерние элементы? Все, что находится в переменной $TempFileLocation . PowerShell перейдет в местоположение, которое мы ранее указали в $TempFileLocation, и получит все находящиеся там дочерние элементы. Затем они поместят их в переменную $TempFile .
Итак, что насчет части -Recurse ? Это говорит Get-ChildItem просмотреть все в этом месте. Не ищите файлы сразу в родительской папке. Если в этой папке есть папки, получите также всех их детей, их детей и так далее. Мы собираемся получить их всех.
$TempFileCount = ($TempFile).count
Да, мы создаем третью переменную с именем $TempFileCount и собираемся поместить в эту переменную число. Где номер? Что ж, ($TempFile).count даст нам это число. Вы, наверное, догадались, что часть .count будет подсчитывать все файлы, которые мы только что сохранили в $TempFile.
Почему мы это сделали? Главным образом потому, что приятно знать, сколько ненужных файлов мы удалили с помощью остальной части скрипта, чтобы мы могли оценить, насколько это было эффективно.
if($TempFileCount -eq 0)
Теперь мы создаем условный оператор. Вы можете видеть, что он спрашивает «если». Если что? Если то, что в скобках, истинно или ложно. Скобки важны, иначе If не знает, что сравнивать. Здесь он спрашивает, равно ли нулю число, которое мы сохранили в $TempFileCount ..
-eq — это сокращение для равенства. Это тип оператора сравнения. Это все равно что сказать своим детям: «Если в вашей комнате чисто, отлично, мы что-нибудь сделаем…». Это утверждение означает, что если число, хранящееся в $TempFileCount, равно нулю, сделайте следующее.
{Write-Host "There are no files in the folder $TempFileLocation" -ForegroundColor Green}
Это произойдет, если $TempFileCount равен нулю. Фигурные скобки важны. Они говорят PowerShell делать только то, что находится внутри них, если $TempFileCount равен нулю.
Он напишет на хосте или на экране: «В папке C:\Users\username\Appdata\Local\Temp\* нет файлов». Параметр в конце –ForegroundColor указывает PowerShell сделать текст зеленым. Так его будет легче отличить от сообщения об ошибке, которое обычно имеет красный цвет.
Else
Вы знаете, что еще значит. Это часть проверки того, что «Ваша комната должна быть чистой, иначе…» — часть проверки, убрал ли ваш ребенок свою комнату. Вот что произойдет, если $TempFileCount не равен нулю.
{$TempFile | Remove-Item -WhatIf -Confirm:$false -Recurse -Force -WarningAction SilentlyContinue -ErrorAction SilentlyContinue}
Это говорит о переходе к текущему местоположению, хранящемуся в $TempFile . Вертикальная линия после нее называется трубой. Он работает как настоящий канал, поскольку сообщает PowerShell направить содержимое $TempFile в командлет, как если бы это была вода, подаваемая по трубопроводу в стиральную машину. Затем командлет Remove-Item делает то, что говорит; он удаляет все, что находится в этом месте.
Параметр -WhatIf очень важен на этом этапе. Он сообщает PowerShell запустить команду, но только попробовать ее, ничего не удаляя. Просто покажите нам, что произошло бы, если бы мы действительно сделали это.
Это позволяет вам тестировать команды, ничего не меняя на вашем компьютере. Оставьте -WhatIf там до тех пор, пока не будете уверены, что сценарий будет делать то, что вы хотите, и ничего больше. Затем просто удалите это, и скрипт выполнит свою работу.
Параметр -Confirm:$false не позволяет сценарию спрашивать, действительно ли вы хотите удалить файл. Вы знаете, что делает -Recurse . -Force означает удаление этого объекта несмотря ни на что. Для -WarningAction установлено значение SillyContinue .
Это не позволит сценарию выдавать вам предупреждения о том, что вы удаляете. Для -ErrorAction установлено значение SillyContinue , поэтому, если в процессе произойдет какая-либо ошибка, он просто продолжит работу..
Теперь мы на последней строчке.
Write-Host "Cleared $TempFileCount files in the folder $TempFileLocation" -ForegroundColor Green}
Как и в первый раз Write-Host , он выведет следующее предложение, чтобы мы знали, что произошло. Он сообщит нам, сколько файлов было удалено из папки, которую он только что обработал, и отобразит это зеленым цветом, чтобы их было легче обнаружить.
Давайте посмотрим на скрипт целиком:
$TempFileLocation = "C:\Users\guymcd\Appdata\Local\Temp\*"
$TempFile = Get-ChildItem $TempFileLocation -Recurse
$TempFileCount = ($TempFile).count
if($TempFileCount -eq "0") {
Write-Host "There are no files in the folder $TempFileLocation" - ForegroundColor Green
}
Else {
$TempFile | Remove-Item -Confirm:$false -Recurse -Force -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
Write-Host "Cleared $TempFileCount files in the folder $TempFileLocation" -ForegroundColor Green
}
Вы можете скопировать и вставить это в свою интегрированную среду сценариев PowerShell и сохранить как-то вроде delete-TemporaryFiles.ps1 . Теперь, когда вы их понимаете, вы также можете придерживаться соглашения об именах командлетов.
Если код у вас по какой-то причине не работает, вы также можете скачать скрипт PowerShell, который мы создали, и просто запустить его. Просто сначала разархивируйте его, чтобы просмотреть файл сценария.
Когда вы захотите запустить этот сценарий, просто щелкните его правой кнопкой мыши и выберите Запустить с помощью PowerShell . Консоль PowerShell появится на секунду или две, пока ваш скрипт выполняет свою работу, а затем исчезнет, если ошибок нет.
Где я могу узнать больше о PowerShell?
Кажется, это очень много! Для вашего первого сценария PowerShell это немало. Если вы зашли так далеко, аплодируйте себе. Сегодня вы многому научились, но теперь хотите узнать больше. Замечательно!
В Интернете можно найти множество ресурсов, где можно узнать больше о PowerShell. Хорошее начало — наша статья «Создайте список запускаемых программ с помощью командной строки или PowerShell. ». Тогда посетите другие ресурсы: