5 способов открыть окно powershell

Как запустить скрипт PowerShell с помощью ярлыка?

Осуществить такую задачу можно двумя способами:

  1. Создать bat/cmd файл, в котором прописать команду для запуска скрипта (с параметрами вы ознакомились выше)
  2. Создать ярлык на PowerShell, который можно найти в папке c:\Windows\System32\WindowsPowerShell\v<версия>\ и в свойствах ярлыка в поле «Объект» дописать необходимые параметры.

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

Скриптовый язык PowerShell — довольно мощный инструмент для решения различных задач, но его можно использовать не только для хороших вещей, но и во вред, поэтому, пользуйтесь им с умом ;)

PowerShell ISE

Для того что бы не навредить системе и проверить работоспособность скрипта, разработку, отладку и тестирование удобно проводить в специальной среде. PowerShell ISE дает такую возможность. Интерфейс приложения разделен на 3 части. В верхней части вы можете добавлять код, в нижней части получать вывод команд, а правая часть является своеобразной справкой. В ней вы можете подсмотреть необходимые для процесса командлеты. Более того в этой среде реализованы различные функции, такие как подсветка синтаксиса, конструктор команд и авто заполнение, что существенно облегчает программирование.

Отправка сигналов скриптам

Завершение работы процесса

Выполним в оболочке такую команду:

$ sleep 100

После этого завершим её работу комбинацией клавиш CTRL + C .

Завершение работы процесса с клавиатуры

Временная остановка процесса

$ sleep 100

И временно остановим её комбинацией клавиш CTRL + Z .

Приостановка процесса

Число в квадратных скобках — это номер задания, который оболочка назначает процессу. Оболочка рассматривает процессы, выполняющиеся в ней, как задания с уникальными номерами. Первому процессу назначается номер 1, второму — 2, и так далее.

Если вы приостановите задание, привязанное к оболочке, и попытаетесь выйти из неё, bash выдаст предупреждение.

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

Ps –l

Список заданий

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

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

Выглядит её вызов так:

Kill processID

Командная строка

«Командная строка, она же shell», – такую фразу вычитал в интернете. Запомните иноземное слово, оно нам ещё встретится. Ещё её могут называть command line, консоль, терминал. Вообще, несмотря на то, что вначале компьютер у нас «заговорил по-русски», в том смысле, что в СССР были свои ЭВМ, программы для которых писались кириллицей, – сегодня для написания любых команд на нашем ПК используются английские слова и производные от них, так что вникать в написание иноземных слов придётся основательно.

Запуск командной строки — это запуск консольного приложения под окнами, а точнее, запуск файла cmd.exe. В зависимости от того, от имени кого, а точнее, с какими правами в Windows 10 будет запущен этот файл, будут зависеть его возможности по исполнению вводимых команд. Наивысшими правами обладает суперадмин , но от его имени что-либо делать на компьютере не так то просто. Оно и понятно, суперадмину подвластно на вашем ПК всё! Проще запустить командную строку от имени обычного пользователя, но при этом не все команды будут исполняться нужным образом из-за недостатка прав. Поэтому лучше командную строку запускать сразу от имени администратора. Сделать это можно разными способами, вот один из них.

Запуск CMD от имени администратора

  1. Жмём клавишу Win, в поле редактора набираем три буквы CMD;
  2. В найденном, на словах «Командная строка, Классическое приложение» вызываем контекстное меню и жмём на строке «Запуск от имени администратора».

В отличие от работы в MS DOS, где после запуска компьютера на синем фоне в левом верхнем углу сиротливо мигали четыре символа, показывающие активную директорию (чтобы увидеть их все, включите отображение пунктуации):

C:\>

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

Особенности работы в командной строке

Казалось бы, командная строка напоминает обычный текстовый редактор: набирай себе текст, и без горя, но есть одно но. Каждое нажатие клавиши Enter вызывает исполнение набранной команды, а после вывода результата на экран опять активна строка ввода команд. Помню, видишь на экране ошибочно введённую команду, а не вернешься и не поправишь, можно только ввести заново все эти кракозябрики!

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

C:\Users\user>

Или вот такой:

C:\Windows\system32>

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

Реализация логирования

В центре нашего внимания будет такой командлет как Start-Transcript. Его функция заключается в протоколировании всего, что происходит в рамках сеанса и сохранении результата в файл. Весь текст, который появляется в консоли, будет фиксироваться в файле.

Что нужно сделать:

  • Создать файловую шару с правами на запись для целевых пользователей;
  • Настроить протоколирование с сохранением лога в файловую шару.

Создадим шару

В качестве примера файловой шары буду использовать папку на моем ПК

Настройка файловой шары

В этом примере я выдал права на изменение для группы “Все”. Не забывайте о том, чтобы не было противоречий с разрешениями на уровне NTFS. Если на вкладке безопасность для группы “Все” будет стоять запрет, логировать запуск команд не получится. В результате этих нехитрых действий папка доступна по пути – \\Vedroid\Share. В качестве сервера файловой шары конечно же может использоваться и удаленный сервер. Главное – это наличие сетевого доступа по протоколу SMB и наличие разрешений на запись.

Настроим протоколирование

Редактируем Profile-скрипт и пишем следующий код:

В файловой шаре будет создана папка с именем пользователя – $env:USERNAME. А дата и время запуска консоли будет именем лог-файла. При запуске команды Start-Transcript она сообщает в консоль о том, что транскрибирование запущено:

Чтобы это скрыть, мы используем командлет Out-Null. Таким образом транскрибирование запустится, но информация об этом не будет выведена в консоль.

Важно, чтобы profile-скрипт был выполнен при запуске консоли, в системе необходимо разрешить выполнение скриптов. По умолчанию в Windows 10 установлен запрет на запуск скриптов powershell

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

Конечно, установка в значение Bypass не очень безопасна, т.к. позволяет запускать вредоносные скрипты powershell. Выходом из ситуации может быть подписание скрипта электронной подписью и установкой Execution Policy в AllSigned. Подробнее о политиках запуска скриптов можно узнать здесь. Или можно обратиться к справке.

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

Результат логирования команд

Конечно в такой конфигурации есть минус. Если пользователь выполнит команду Start-Transcript при уже запущенном транскрибировании, то получит соответствующее уведомление. И после выполнения Stop-Transcript логирование будет прекращено.

Так же есть риск в плане безопасности. Если злоумышленник имеет доступ в профиль пользователя, он может заменить код profile-скрипта. А если скрипта нет, то создать его. И этот код будет выполнен при запуске консоли от имени жертвы. Но такой риск существует всегда, не зависимо от темы текущей статьи. Охраняйте доступ к Вашему профилю!

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

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

  • Measure-Object – командлет позволяет рассчитывать на основе свойств объектов такие числовые агрегирующие параметры как: минимальное, максимальное, среднее значение, сумму и количество. Например, Вы хотите узнать максимальный или средний размер файла в определенном каталоге, или просто узнать количество файлов (запущенных процессов, служб и так далее);
  • Select-Object – с помощью данного командлета можно выбрать определенные объекты или свойства этих объектов, например Вы хотите выводить только название файла и его размер;
  • Sort-Object — сортирует объекты по значениям свойств;
  • Where-Object – командлет для того чтобы ставить условие для выборки объектов на основе значений их свойств;
  • Group-Object – группирует объекты, которые содержат одинаковое значение для заданных свойств;
  • ForEach-Object – перебор объектов с целью выполнения определенной операции над каждым из этих объектов.

8 ответов

Я наконец-то заставил свой скрипт PowerShell автоматически запускаться при каждом запуске. Вам нужно будет создать два файла: первый — это скрипт Powershell (например, ), а второй — файл .cmd, который будет содержать команды, которые будут выполняться в командной строке (например, ).

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

  1. Создайте сценарий .ps1 и поместите его в папку. Я положил его на свой рабочий стол для простоты. Путь будет выглядеть примерно так:
  1. Создайте файл .cmd и поместите его в

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

  1. Откройте файл .cmd в текстовом редакторе и введите следующие строки:

Это сделает две вещи:

  1. Установите для политики выполнения вашей PowerShell значение Неограниченно. Это необходимо для запуска сценариев, иначе PowerShell этого не сделает.
  2. Используйте PowerShell для выполнения сценария .ps1, найденного по указанному пути.

Этот код специально для PowerShell v1.0. Если вы используете PowerShell v2.0, он может немного отличаться. В любом случае, проверьте этот источник на наличие кода .cmd.

  1. Сохраните файл .cmd

Теперь, когда у вас есть файлы .ps1 и .cmd по соответствующим путям и со сценарием для каждого, все готово.

Вы можете установить его в качестве запланированной задачи и установить триггер задачи для «При запуске»

Что я делаю, это создаю ярлык, который помещаю в shell: startup.

Ярлык имеет следующее:

Цель:

(замена scripts \ scripts.ps1 на то, что вам нужно)

Начать с:

(замена скриптов папкой с вашим скриптом)

Скопируйте ps1 в эту папку и создайте его при необходимости. Он будет запускаться при каждом запуске (до входа пользователя в систему).

Также это можно сделать через GPEDIT.msc, если он доступен в вашей сборке ОС (возможно, ОС более низкого уровня).

У меня есть скрипт, который также запускает наблюдателя файловой системы, но как только окно скрипта закрывается, наблюдатель умирает. Он будет работать весь день, если я запусту его из окна powershell и оставлю его открытым, но как только я закрою его, скрипт перестанет делать то, что должен.
Вам нужно запустить скрипт, чтобы он оставался открытым PowerShell.
Я попробовал множество способов сделать это, но тот, который действительно работал, был из http://www.methos-it.com/blogs/keep-your-powershell-script-open-when-executed

Вставка этого в начало скрипта — вот что заставило его работать.
Я запускаю скрипт из командной строки с помощью

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

  1. Нажмите кнопку Windows (кнопка Windows + r)
  2. Введите это:
  1. Создайте новый ярлык , щелкнув правой кнопкой мыши и в контекстном меню выберите пункт меню: New => Ярлык

  2. Создайте ярлык для вашего скрипта, например:

Обратите внимание на использование -NoProfile .
Если вы много инициализируете в вашем файле $ profile, неэффективно загружать его, чтобы просто запустить скрипт Powershell. -NoProfile пропустит загрузку файла вашего профиля и будет разумно указать, нужно ли запускать его перед выполнением скрипта Powershell

Здесь вы видите такой ярлык, созданный (файл .lnk со значком Powershell с символом ярлыка):

Это сработало для меня. Создано запланированное задание с подробностями ниже:
Триггер: при запуске

Действия:
Программа /скрипт: powershell.exe
Аргументы: -файл

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

Во-первых, откройте проводник для оболочки: местоположение запуска с помощью кнопки start => запустите:

Щелкните правой кнопкой мыши в этой папке и в контекстном меню выберите новый ярлык. Введите следующее:

Это запустит сценарий Powershell без запуска сценариев $ profile для более быстрого выполнения. Это обеспечит запуск сценария powershell.

Папка оболочки: автозагрузка находится в:

А затем в папку:

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

Приступая к работе

Майкрософт

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Alias                                  Alias
C                  16.56         63.44 FileSystem    C:\
cert                                   Certificate   \
D                    .11         53.92 FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan
Set-Location HKLM: # Или, если вы из людей подосёвее, набирайте cd HKLM:
SKC  VC Name                           Property
---  -- ----                           --------
  2   0 BCD00000000                    {}
  4   0 HARDWARE                       {}
  1   0 SAM                            {}
Get-ChildItem : Requested registry access is not allowed.
At line:1 char:3
+ ls <<<<  -force
    + CategoryInfo          : PermissionDenied: (HKEY_LOCAL_MACHINE\SECURITY:St
   ring) , SecurityException
    + FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.Power
   Shell.Commands.GetChildItemCommand

 35   0 SOFTWARE                       {}
  8   0 SYSTEM                         {}

Как фильтровать через Powershell файлы открытые по сети

Мы можем получить данные только по определенному свойству. Т.е. это могут быть файлы открытые определенным пользователем, компьютером, с каким-то расширением и т.д. Для того что бы увидеть все свойства объекта нужно сделать следующее:

Все что выделено — это свойство, которое мы можем вывести или отфильтровать по нему. Например я хочу вывести все компьютеры с которых выполнено подключение:

Меня могут не интересовать все компьютеры, а только файлы открытые с определенного адреса:

Таким образом я вывел все сессии, где свойство ClientComputerName заканчивается на 3.1.

Аналогично мы можем найти всех пользователей:

Если нам нужно найти, например, конкретный файл или расширение, то мы можем воспользоваться свойством Path или ShareRelativePath:

Таким образом я нашел все сессии, где открытый файл заканчивается на txt.

Командлеты powershell

Sort-Object — сортирует объекты по возрастанию или по убыванию на основе значений свойств объектов. Можно задать одно свойство или несколько свойств (сортировка по нескольким ключам), а также выбрать сортировку с учетом или без учета регистра. Кроме того, можно сделать так, чтобы командлет Sort-Object выводил только объекты с уникальными значениями того или иного свойства.

Copy-Item — копирует элемент из одного местоположения в пространстве имен в другое. Командлет Copy-Item не удаляет копируемые элементы. Типы элементов, которые может копировать командлет, определяются наличием поставщиков Windows PowerShell. Например, при использовании командлета с поставщиком FileSystem копируются файлы и папки, а при работе с поставщиком реестра копируются разделы и записи реестра.

Move-Item — перемещает элемент, включая его свойства, содержимое и дочерние элементы, из одного местоположения в другое. Оба заданных местоположения должны поддерживаться одним и тем же поставщиком. Например, можно переместить файл или вложенный каталог из одного каталога в другой либо переместить подраздел реестра из одного раздела в другой. При перемещении элемента он удаляется в исходном местоположении и создается в новом.

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

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

Что собой представляет Windows PowerShell?

PowerShell – интерпретатор командной строки CMD на основе .NET Framework, наделённый собственным языком сценариев.

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

Как это было в MS-DOS и старых версиях UNIX’а.

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

Для Vista, XP и более старых редакций Windows, если их кто-то использует, PowerShell можно установить с пакета Windows Management Framework.

По сравнению с другими интерпретаторами, PS отличается:

  • интеграцией с .NET Framework – позволяет создавать мощные скрипты, внедряя в них программный код;
  • все возвращаемые данные являются объектами, а не данными текстового/строчного типа (string), что подразумевает их передачу другим скриптам и любую обработку.

Рис. 1 – Вид окна PowerShell

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

  • Возможность представления команд в виде командлетов – их запуск осуществляется внутри интерпретатора, в ином случае команда выполняется в отдельном процессе.
  • Использование конвейеров – предназначены для передачи данных из одной команды в другую с сохранением их структуры и типа.
  • Интегрирована многопоточная передача данных по сети с установкой приоритетности и возобновлением соединения.
  • Поддержка позиционных и именованных параметров.
  • Фоновая работа – асинхронный вызов команд и запуск скриптов на удалённых машинах.
  • Установка ограниченных сессий с удалёнными клиентами и выполнение сценариев на них.
  • Модули – способ организации скриптов, когда они становятся самодостаточными и выполняются в собственном контейнере, не влияя на окружение модуля.
  • Наличие обработчика ошибок.
  • Графическая среда для языка: синтаксис, отладчик, подсветка, автоматическое завершение команд с поддержкой Юникод и закладок.
  • Добавление точек прерывания в строки, команды, операции и переменные для отладки сценария.
  • Блочные и подстрочные комментарии.
  • Поддержка создания алиасов для некоторых командлетов, преобразовывающихся в обычные команды в момент выполнения.
  • Создание ограниченных сессий, где можно выполнять строго заданный перечень команд и очень многое другое.

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

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

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

Хотя, не обладая знаниями об основных понятиях PowerShell, сделать в окне командного интерпретатора вряд ли что-либо получится. С них и начнём.

Адаптация скриптов PowerShell для Linux

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

В Invoke-TheHash есть функция Invoke-SMBEnum, которая выполняет перечисление пользователей, групп, сетевых сессий и совместных ресурсов. В Windows эта функция работает отлично. Попробую использовать её в Linux.

Запускаю консоль PowerShell:

pwsh

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

cd ./bin/Invoke-TheHash/

Импортирую файл с нужной функцией:

Import-Module .\Invoke-SMBEnum.ps1

Запускаю:

Invoke-SMBEnum -Target 192.168.0.53 -Action All -Username HackWare-mial\Администратор -Hash 5187b179ba87f3ad85fea3ed718e961f -verbose

И получаю ошибку «Cannot find path ‘computername’ because it does not exist.», она означает, что не получается найти путь computername (имя компьютера), т. к. путь не существует. Ошибка возникла в этой строке:

$auth_hostname = (Get-ChildItem -path env:computername).Value

Если попытаться выполнить отдельно команду из этой строки:

Get-ChildItem -path env:computername

то она вызовет эту же самую ошибку:

Get-ChildItem: Cannot find path 'computername' because it does not exist.

Можно предположить (лучше посмотреть в справке, но мне лень туда лезть), что env имеет отношение к переменным окружения, а computername — это имя переменной, которая содержит (как следует из названия) имя компьютера. Судя по всему, в Linux эта переменная окружения не существует.

Самое простое решение — прописать это имя вручную. Для этого открываю файл Invoke-SMBEnum.ps1 текстовым редактором, нахожу там строку

$auth_hostname = (Get-ChildItem -path env:computername).Value

И меняю её на такую строку:

$auth_hostname = 'hackware-mial'

То есть я просто прописал имя компьютера вместо получения его с помощью функции.

Важно помнить, что после импорта функция будет считываться не из файла, который я изменил, а из памяти. Поэтому чтобы PowerShell увидел сохранённые в файле изменения, нужно заново выполнить импорт файла — для этого пришлось закрыть (CTRL+d) и открыть заново PowerShell:

pwsh

Импортируем файл:

cd ./bin/Invoke-TheHash/
Import-Module .\Invoke-SMBEnum.ps1

И после этого вновь запускаю команду:

Invoke-SMBEnum -Target 192.168.0.53 -Action All -Username HackWare-mial\Администратор -Hash 5187b179ba87f3ad85fea3ed718e961f -verbose

В этот раз команда сработала.

Мораль:

  • после внесения изменений в файл нужно заново его импортировать (возможно, даже перезайти в PowerShell)
  • некоторые проблемы с запуском скриптов PowerShell в Linux достаточно просто решить самостоятельно

Работа с Hyper-V

Для работы с Hyper-V в Windows PowerShell существует много командлетов, вот небольшой перечень:

  • New-VM — создание новой виртуальной машины;
  • Set-VM — настройка виртуальной машины;
  • Start-VM — запуск виртуальной машины;
  • Stop-VM — закрытие, выключение или сохранение виртуальной машины;
  • Import-VM — импорт виртуальной машины из файла;
  • Move-VM — перемещение виртуальной машины на новый Hyper-V хост;
  • Remove-VM — удаление виртуальной машины;
  • Rename-VM — переименование виртуальной машины;
  • New-VHD — создание одного или нескольких новых виртуальных жестких дисков;
  • Set-VHD – настройка виртуального жесткого диска;
  • Test-VHD — тестирование виртуального жесткого диска на предмет обнаружения проблем, которые сделали бы его непригодным для использования;
  • Add-VMDvdDrive — добавляет DVD диск к виртуальной машине;
  • Remove-VMDvdDrive — удаляет DVD-диск из виртуальной машины;
  • Add-VMHardDiskDrive — добавляет жесткий диск к виртуальной машине;
  • Remove-VMHardDiskDrive — удаляет один или несколько виртуальных жестких дисков (VHD) из виртуальной машины;
  • Add-VMNetworkAdapter — добавляет виртуальный сетевой адаптер на виртуальной машине;
  • Remove-VMNetworkAdapter — удаляет один или несколько виртуальных сетевых адаптеров из виртуальной машины;
  • Copy-VMFile — копирование файлов на виртуальную машину;
  • Get-VMVideo – выводит информацию о настройках видео для виртуальных машин;
  • Move-VMStorage — перемещение хранилища виртуальной машины.

Форматирование в Windows PowerShell

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

  • Format-List – вывод результата команды в формате списка свойств, где на каждой новой строке отдельное свойство;
  • Format-Table — вывод результата команды в виде таблицы;
  • Format-Wide — вывод результата команды в виде широкой таблицы, в которой отображается только одно свойство каждого объекта;
  • Format-Custom – в данном случае форматирование вывода происходит с использованием пользовательского представления.

Удаленное выполнение PowerShell с помощью Invoke-Command

Командлет Invoke-Command позволяет выполнить команду на одном или нескольких удаленных компьютерах.

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

Invoke-Command -ComputerName dc01 -ScriptBlock {$PSVersionTable.PSVersion}

1 Invoke-Command-ComputerNamedc01-ScriptBlock{$PSVersionTable.PSVersion}

Эта команда выведет в вашу консоль значение версии PowerShell, установленной на удаленном компьютере, имя которого указано в параметре 
-ComputerName. В блоке 
-ScriptBlock{cmdlet} указывается команда, которую нужно запусть на удаленном компьютере.

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

$cred = Get-Credential
Invoke-Command -ComputerName comp-buh2 -Credential $cred -ScriptBlock {Get-NetAdapter}

1
2

$cred=Get-Credential

Invoke-Command-ComputerNamecomp-buh2-Credential$cred-ScriptBlock{Get-NetAdapter}

Эта PowerShell команда выведет список сетевых интерфейсов на удаленном компьютере:

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

Invoke-Command -Computername dc01 -ScriptBlock {Get-TimeZone| select DisplayName;Set-TimeZone -Name «Astrakhan Standard Time”}

1 Invoke-Command-Computernamedc01-ScriptBlock{Get-TimeZone|select DisplayName;Set-TimeZone-Name»Astrakhan Standard Time”}

Invoke-Command позволяет выполнять не только отдельные команды, но и запускать скрипты PowerShell. Для этого используется аргумент 
-FilePath (вместо –ScriptBlock). При этом вы указываете путь к локальному PS1 файлу скрипта на вашем компьютере (вам не нужно копировать файл скрипт на удаленный компьютер):

Invoke-Command -ComputerName Server01 -FilePath c:\PS\Scripts\GetComputerInfo.ps1

1 Invoke-Command-ComputerName Server01-FilePathc\PS\Scripts\GetComputerInfo.ps1

Командные файлы

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

Командные файлы чаще всего имеют расширение *.bat, но могут иметь и другие расширения. Например, *.cmd будут запускаться только в командной строке. В зависимости от набора команд само окно командной строки может не появляться, обеспечивая быстрое и скрытное выполнение команд, записанных в файле.

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

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

  • Секреты работы с командной строкой в WINDOWS;
  • Тонкости работы в командной строке Windows.

Не знаю, есть ли потребность в продолжении публикаций на эту тему, зависит от вас!

Формулировка задачи и немного о переменной $Profile

Необходимо собирать информацию о запускаемых пользователем или администратором команд и результате их выполнения в консоли

Это может быть полезным для разрешения внештатных ситуаций по неосторожности. А так же для истории

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

Переменная $Profile возвращает путь к скрипту, который инициализируется при каждом запуске консоли. Это своего рода как автозагрузка для Windows, но только для powershell.

Значение переменной $profile

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

  • $env:userprofile\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 – для классической консоли;
  • $env:userprofile\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1 – для консоли ISE.

Далее в нем можно описать какие-либо свои команды или функции. Ими можно будет пользоваться сразу после запуска консоли без необходимости их объявления при каждом запуске. Потому что они уже будут проиницализированы при старте консоли.

Создание файлов и папок

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

Эта команда создает папку :

New-Item -Path 'C:\temp\New Folder' -ItemType Directory

Эта команда создает пустой файл .

New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File

Важно!

При использовании параметра Force с командой  для создания папки, которая уже существует, она не перезапишет и не заменит папку. Будет просто возвращен имеющийся объект папки. Однако, если использовать  в уже имеющимся файле, файл будет полностью перезаписан.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
DS-сервис
Добавить комментарий

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