Проксирование
Этот метод отличается от всех вышеперечисленных, и служит совсем для других задач, но не менее актуален. Когда делегирование полномочий невозможно, или предоставляет слишком большие возможности, он позволяет разрешить обычному пользователю выполнять некую команду. Требующую административных привилегий, никаким образом не выдавая дополнительных полномочий и не подставляя под угрозу пароль администратора.
Чаще всего такие проблемы люди решают с помощью утилит вроде cpau.exe. Они создают файл с зашифрованным паролем административной учетной записи, позволяющий запускать определённую программу. Проблема, однако, в том, что хоть пароль и зашифрован, перед запуском программы утилите придётся его расшифровать. А соответственно пользователь может использовать утилиту повторяющую алгоритм расшифровки пароля, и узнать его, чтобы затем использовать для запуска других программ или получения дополнительных привилегий. Практически это конечно достаточно сложно для обычных пользователей, не обладающих специальными знаниями, но, тем не менее, вполне возможно. Еще раз уточню, это не беда конкретной утилиты, а проблема такого подхода вообще.
Еще может показаться, что для решения задачи подойдет параметр /savecred утилиты runas. Но тут есть даже две проблемы. Во-первых, как и вышеописанном случае, пароль сохраняется на компьютере пользователя, а, следовательно, может быть расшифрован, хотя в случае с runas для этого и понадобятся права локального администратора. Во-вторых, runas сохраняет учетные данные, не связывая их с конкретной командой, а, следовательно, пользователь сможет запустить с завышенными правами не только ту команду, доступ к которой вы хотели ему предоставить, но и любую другую.
Чтобы избежать этих проблем, но, тем не менее, разрешить выполнение конкретной команды, можно использовать методику, которая называется «проксированием».
Работает она следующим образом. На компьютере постоянно работает сценарий с высокими привилегиями. Например, в нашем случае он будет запущен из-под учетной записи, обладающей правами администратора на файловом сервере. По сигналу пользователя он будет выполнять одну, заранее определённую команду. В этом примере – закрывать все файлы, открытые по сети.
Для организации этой системы мы поместим на сервере, например в папке c:\scripts\ командные файлы Server.cmd и Action.cmd .
Листинг №5 – Action.cmd (Windows Batch)
Server.cmd будет ждать знака от пользователя, и получив его, запускать файл с командами – Action.cmd. Разумеется, в эту папку пользователи не должны иметь никакого доступа. Автоматический запуск Server.cmd при запуске компьютера можно организовать, просто создав соответствующую задачу в планировщике:
После параметра /ru указывается учетная запись, под которой будет выполняться сценарий (в нашем случае она обладает правами администратора на сервере), так как после параметра /rp пароль не указан – он будет запрошен при создании задачи. Параметр /sc позволяет указать момент запуска сценария, в нашем случае – при включении компьютера. Ну а /tn и /tr позволяют указать имя задачи, и исполняемый файл.
Теперь, для того чтобы пользователь мог подать сценарию сигнал, мы создадим папку c:\commandShare и сделаем её доступной по сети. Доступ на запись в эту папку должен быть только у тех пользователей, которые будут запускать команду.
После этого достаточно будет поместить пользователю на рабочий стол файл Run.cmd.
Листинг №6 – Run.cmd (Windows Batch)
При его выполнении, от имени пользователя, будет создаваться файл \\server\commandShare\trigger.txt. Сценарий Server.cmd, заметив его, запустит на выполнение со своими привилегиями файл Action.cmd. Он добавит запись в файл c:\scripts\log.txt о текущем времени, а затем удалит trigger.txt .Чтобы не выполнять команду снова до следующего сигнала пользователя.
В сценарии Server.cmd используется утилита Sleep.exe, позволяющая сделать паузу в выполнении сценария на заданный в секундах промежуток времени. Она не входит в состав операционной системы, но её можно взять из набора Resource Kit Tools (см. ссылки) и просто скопировать на любой компьютер.
Running Remote Commands with PowerShell Remoting
To interactively connect to a remote computer (with a hostname Server1) via PowerShell, run the following command:
Enter-PSSession Server1
The PowerShell CLI view will change. At the beginning of the line, there will be the name of the remote computer to which you are connected via WinRM. After the remote session is established, all commands that are being entered in the PowerShell console are executed on the remote computer. PS Remoting works as follows: the commands entered on the local computer are transmitted to the remote computer and executed there, then the result is transmitted back. Since all commands are executed locally, there is no need to worry about compatibility with the PowerShell version and modules.
To end the remote interactive session run the command:
Exit-PSSession
Only simple management tasks are typically performed on remote computers in interactive mode. To run a complex command or run the PowerShell script remotely, use the Invoke-Command cmdlet.
Как просмотреть историю команд PowerShell
Наиболее значительным преимуществом функции «История» является то, что вам не нужно набирать текст снова, чтобы выполнить определенную команду, которую вы уже выполнили один раз. Однако рекурсивный просмотр сотен команд не очень помогает. Как насчет их поиска или выполнения определенной команды, которую вы помните лишь частично? Следуйте этим методам.
- Клавиатурный метод
- Поиск вперед или назад в истории PowerShell
- Просмотреть всю историю этого сеанса
- Вызов определенной команды из истории команд PowerShell
- Искать в истории
В конце мы также объяснили, как можно очистить, экспортировать и импортировать историю команд PowerShell. Очень удобно, если вам нужно часто выполнять одни и те же команды.
1]Метод клавиатуры
Я уверен, что вы уже однажды использовали командную строку, если какое-то время пользовались Windows. Если вы используете клавиши со стрелками вверх и вниз, вы можете перемещаться вперед и назад по выполненным командам. То же самое относится и к PowerShell. Но вот изюминка. Если вы частично помните команду, вот как ее искать.
- Введите часть команды, которую вы помните
- Нажмите F8 и продолжайте нажимать, пока не найдете.
- Термин поиска будет выделен флуоресцентным зеленым цветом, за ним следует остальная часть команды.
Единственный недостаток заключается в том, что поисковый запрос должен быть началом команды.
2]Искать вперед или назад в истории
Если вы хотите искать вперед или назад в истории, вы можете использовать Ctrl + R и Ctrl + S. Первый позволяет вам искать назад в истории, а второй — вперед. Как только вы воспользуетесь сочетанием клавиш, внизу должен появиться фрагмент (bck-i-search или fwd-i-search). Введите то, что вы хотите найти, и даже если текст принадлежит где-то в середине команды, он будет искать его. Это намного лучше по сравнению с методом F8, который мы использовали выше.
3]Просмотреть всю историю команд PowerShell этого сеанса
Введите History и нажмите клавишу Enter. Вы должны увидеть все команды, которые вы выполнили в текущем сеансе. Хотя вы можете просматривать команды, выполненные в предыдущем сеансе, с помощью клавиш со стрелками, в истории этого не будет. Если вы нажмете клавиша «H» и нажмите Enter, откроется история команд. Считайте это ярлыком для команды «История».
4]Вызов определенной команды из истории
Если вы заметили, на изображении выше есть идентификатор рядом с каждой командой. Если вы хотите выполнить одну конкретную команду из списка, вам нужно использовать Invoke-History.
Обратите внимание на идентификатор команды, которую вы хотите выполнить.
Тип Вызов истории. Замените точным числом
Нажмите клавишу Enter, и он выполнит эту команду из истории.
5]Поиск в истории
Самый простой способ поиска в истории команд — использовать метод Select-String для вывода истории.
- Введите следующее и замените Get на термин, который вы хотите найти.
- Get-History | Select-String -Pattern «Получить».
- Он покажет все команды, которые соответствуют командам поиска.
Поскольку у вас есть идентификатор, вы можете использовать команду «Вызов истории», чтобы выполнить ее мгновенно.
Очистить, экспортировать и импортировать историю PowerShell
Чтобы удалить все команды из истории, все, что вам нужно сделать, это выполнить команду «Чистая история
» Обратите внимание, что даже после этого вы все равно можете получить доступ к команде с помощью клавиш со стрелками вверх и вниз
К экспортировать все команды, вы можете использовать Экспорт-Clixml или Экспорт-CSV формат. Вот пример команды
Get-History | Export-Clixml -Path <Path>PSHistorycommands.xml Get-History | Export-Csv -Path <Path>PSHistorycommands.csv
К импортировать эти команды обратно в другой или новый сеансиспользуйте следующую команду.
Add-History -InputObject (Import-Clixml -Path <Path>PSHistorycommands.xml) Add-History -InputObject (Import-Csv -Path <Path>PSHistorycommands.csv)
Вы можете открыть этот CSV- или XML-файл в любое время, чтобы мгновенно просмотреть историю команд PowerShell. Это в значительной степени суммирует почти все, что касается истории команд PowerShell, и то, как вы можете повторно использовать их, используя числа, или выполняя поиск, или импортируя их обратно на следующий день.
Windows PowerShell 2.0 Remoting
Хотя вторая версия Windows PowerShell на момент написания статьи находится еще в состоянии бета тестирования, о её возможностях в области удалённого выполнения команд определённо стоит рассказать уже сейчас. Попробовать его своими руками вы можете либо загрузив предварительную версию (см. ссылки) либо в составе бета-версии Windows 7 или Windows Server 2008 R2.
Инфраструктура PowerShell Remoting основана на WinRM версии 2.0. И поэтому наследует все преимущества этой технологии, такие как шифрование передаваемых данных, и возможность работать по стандартным портам HTTP/HTTPS. Но благодаря богатым возможностям языка Windows PowerShell. И его способностям работы с объектами, мы получаем еще большие возможности. На данный момент пакет WinRM2.0 тоже находится в состоянии бета-тестирования, и доступен для загрузки только для систем Windows Vista и Windows 2008. В системы Windows 7 и Windows Server 2008R2 он будет встроен изначально, как и PowerShell 2.0.
Примечание:
Перед тем как воспользоваться всеми этими преимуществами, PowerShell Remoting необходимо активизировать, на управляющем, и управляемых компьютерах. Сделать это просто, запустив командлет (команду Windows PowerShell) Enable-PSRemoting. Причем если добавить ключ -Force то никаких подтверждений запрошено не будет. Этот командлет при необходимости вызовет winrs quickconfig, и создаст исключения в брандмауэре Windows, так что никаких дополнительных действий выполнять не нужно.
После этого вы сможете легко выполнять команды на других компьютерах используя командлет Invoke-Command (или его псевдоним icm):
Разумеется команду можно заранее поместить в переменную, а для параметра -ComputerName указать имена не одного, а сразу нескольких компьютеров. Следующая последовательность позволяет вывести версию файла Explorer.exe сразу с трех компьютеров.
Выполнить команду на удалённом компьютере
Как видно на, можно передавать сразу несколько команд в одном блоке, помещать их результаты выполнения на нескольких компьютерах в переменную, а затем обрабатывать на рабочей станции используя возможности Windows PowerShell по работе с объектами.
Впрочем возможности PowerShell Remoting на этом только начинаются. С помощью командлета Enter-PSSession вы можете войти в интерактивную сессию Windows PowerShell на удалённом компьютере. Выйти из такого сеанса можно использовав командлет Exit-PSSession, или просто exit.
Командлет New-PSSession создает сессии на удалённых компьютерах, указатели на которые можно поместить в переменную, а затем передавая её как аргумент для Invoke-Command выполнять команды сразу на нескольких компьютерах, в постоянном окружении. Пример вы можете увидеть на скриншоте, где я выполняю последовательность команд сразу на нескольких компьютерах из списка c:\computers.txt.
Выполнить команду на удалённом компьютере
Настройка WinRM для PowerShell Remoting
Для связи между компьютерами в PowerShell Remoting используется протокол HTTP (порт TCP/5985) или HTTPS (порт TCP/5986). По умолчанию используется протокол HTTP, но даже этот трафик шифруется с помощью ключа AES-256 (впрочем, есть угроза атак man-in-the middle). Возможна аутентификация через Kerberos (в домене) или NTLM.
На удаленных компьютерах, к которым планируется подключаться должен быть запущена служба WinRM. Проверить это можно так:
Get-Service -Name "*WinRM*" | fl
Если служба не запущена, запустим ее:
Enable-PSRemoting
Данная команда запустит службу WinRM (установит автоматический запуск), выставит настройки winrm по-умолчанию и добавит исключение в Windows Firewall. Команда включает WinRM без запроса пользователя.
Nota Bene! PowerShell Remoting по-умолчанию не работает, если тип сети определен как общедоступная (Public). В этом случае команда вернет ошибку:
Исключение брандмауэра WinRM не будет работать, поскольку одно из сетевых подключений, установленных для этого компьютера, является общим. Измените тип сетевого подключения либо на доменное, либо на частное и повторите попытку.
Нужно изменить тип сети на частную (private)
Проверяем подключение к удаленному компьютер через PowerShell Remoting
Test-WsMan HostName wsmid : http://schemas.dmtf.orgwbemwsmanidentity1wsmanidentity.xsd ProtocolVersion : http://schemas.dmtf.orgwbemwsman1wsman.xsd ProductVendor : Microsoft Corporation ProductVersion : OS: 0.0.0 SP: 0.0 Stack: 3.0
В случае если нет домена, или обращение к компьютерам через PowerShell Remoting идет по IP адресам, в этом случае для аутентификации используется протокол NTLM. При использовании NTLM, при выполнении команду Invoke-Command появится ошибка:
Invoke-Command -ComputerName 10.10.10.12 {Get-Service}
Сбой подключения к удаленному серверу 10.10.10.12. Сообщение об ошибке: Клиенту WinRM неудается
обработать запрос. Если применяемая схема проверки подлинности отличается от Kerberos или компьютер клиента не
входит в домен, необходимо использовать транспорт HTTPS или добавить компьютер назначения к значениям параметра
конфигурации TrustedHosts. Чтобы настроить TrustedHosts, используйте winrm.cmd
Обратите внимание, что в списке
TrustedHosts могут находиться компьютеры, не прошедшие проверку подлинности. Чтобы получить дополнительные сведения
об этом, выполните следующуюкоманду: winrm help config
Подробности см. в разделе справки
«about_Remote_Troubleshooting».
Для корректной работы NTLM аутентификации, на компьютере, с которого будем устанавливать подключения, нужно выполнить дополнительные действия: выпустить SSL сертификат или добавить имя/IP адрес хоста в доверенные:
Set-Item wsman:\localhost\Client\TrustedHosts -value 10.10.10.12 Настройка безопасности службы WinRM. Данная команда изменяет список TrustedHosts для клиента WinRM. Возможно, не будет проверяться подлинность компьютеров,указанных в списке TrustedHosts. Также возможно, что клиенты будут отправлять на эти компьютеры учетные данные. Выдействительно хотите изменить этот список? Y Да - Y N Нет - N S Приостановить - S ? Справка (значением по умолчанию является "Y"):
Аналогичные настройки нужно сделать на удаленных хостах.
Чтобы вывести список доверенных хостов, выполним:
Get-Item WSMan:\localhost\Client\TrustedHosts
Чтобы применить изменения, перезапустим службу WinRM:
Restart-Service WinRM
Как просмотреть историю PowerShell
Windows PowerShell сама хранит историю команд, введенных вами в текущем сеансе PowerShell. Вы можете использовать несколько включенных командлетов для просмотра и работы с историей.
Чтобы просмотреть историю введенных вами команд, запустите следующий командлет:
Получить-История
Вы можете просмотреть свою историю, передав результат командлету Select-String и указав текст, который нужно найти. Замените пример в командлете ниже текстом, который вы хотите найти:
Get-История | Select-String -Pattern "Пример"
Чтобы просмотреть более подробную историю команд, которая показывает состояние выполнения каждой команды, а также время начала и окончания, выполните следующую команду:
Get-История | Формат-Список -Свойства *
По умолчанию командлет Get-History отображает только 32 самые последние записи в истории. Чтобы отобразить или найти дополнительные записи истории, используйте параметр -Count, чтобы указать, сколько записей истории вы хотите отобразить в PowerShell, например:
- Get-History-Count 1000
- Get-History -Count 1000 | Select-String -Pattern «Пример»
- Get-History -Count 1000 | Формат-Список -Свойства *
Обновление за май 2023 года:
Теперь вы можете предотвратить проблемы с ПК с помощью этого инструмента, например, защитить вас от потери файлов и вредоносных программ. Кроме того, это отличный способ оптимизировать ваш компьютер для достижения максимальной производительности. Программа с легкостью исправляет типичные ошибки, которые могут возникнуть в системах Windows — нет необходимости часами искать и устранять неполадки, если у вас под рукой есть идеальное решение:
- Шаг 1: (Windows 10, 8, 7, XP, Vista — Microsoft Gold Certified).
- Шаг 2: Нажмите «Начать сканирование”, Чтобы найти проблемы реестра Windows, которые могут вызывать проблемы с ПК.
- Шаг 3: Нажмите «Починить все», Чтобы исправить все проблемы.
Просмотреть полную историю команд PowerShell для этого сеанса
Введите историю и нажмите Enter. Вы должны увидеть все команды, которые вы выполнили в текущем сеансе. Хотя вы можете использовать клавиши со стрелками для отображения команд, которые вы выполняли в предыдущем сеансе, вы не можете сделать это в истории. Если вы нажмете клавишу H и нажмете клавишу Enter, отобразится история команд. Думайте об этом как о ярлыке команды «История».
Очистить историю команд в PowerShell
Как объяснено выше, модуль PSReadline хранит все команды консоли PowerShell в текстовом файле. Однако в некоторых случаях администратор должен вводить в консоль PowerShell различную конфиденциальную информацию (учетные данные, пароли, адреса, личную информацию и т. Д.). Это позволяет другому администратору сервера или злоумышленнику получить доступ к исторической информации в виде простого текстового файла. По соображениям безопасности вам может потребоваться удалить историю команд PowerShell, которые были выполнены, или полностью отключить историю команд.
Вы не можете использовать командлет Clear-History, чтобы удалить историю команд. Он удаляет только список предыдущих команд, отображаемых командлетом Get-History.
Чтобы очистить историю предыдущих команд PoSh, вы должны удалить файл, в котором хранятся эти команды. Самый простой способ — использовать:
Remove-Item (Get-PSReadlineOption) .HistorySavePath
Затем закройте окно PoSh.
Если вы хотите полностью отключить сохранение истории команд PoSh в текстовом файле, запустите:
Set-PSReadlineOption -HistorySaveStyle Сохранить ничего
Вы можете открыть этот файл CSV или XML в любое время, чтобы сразу просмотреть историю команд PowerShell. В нем кратко изложено практически все, что касается истории команд PowerShell и как вы можете повторно использовать ее, сосредоточившись на ней, выполняя поиск или импортируя на следующий день.
Совет экспертов:
Эд Мойес
CCNA, веб-разработчик, ПК для устранения неполадок
Я компьютерный энтузиаст и практикующий ИТ-специалист. У меня за плечами многолетний опыт работы в области компьютерного программирования, устранения неисправностей и ремонта оборудования. Я специализируюсь на веб-разработке и дизайне баз данных. У меня также есть сертификат CCNA для проектирования сетей и устранения неполадок.
Сообщение Просмотров: 411
Работа с 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 — перемещение хранилища виртуальной машины.
PsExec
Одним из отличных решений поставленной в заголовке задачи является использование программы PsExec от великого Марка Руссиновича.
Программа работает по клиент-серверному принципу: на локальной машине выполняется клиент, который посылает команды серверу на удаленном компьютере. Особенностью этой программы является то, что серверная часть устанавливается автоматически непосредственно перед выполнением команды, а затем удаляется. Таким образом для выполнения команд на удаленных машинах достаточно иметь на них административные права.
Если PsExec запускается от имени администратора, который входит в тот же домен, что и удаленны компьютер, то никаких учетных данных даже вводить не нужно. В противном случае, их можно указать в командной строке, либо PsExec сама их запросит. PsExec работает на ОС начиная с Windows 2000 и заканчивая 64-битным Windows Server 2008 R2.
Очень полезными в PsExec являются следующие возможности:
- Выполнение команды на группе компьютеров. Пример: следующая команда позволяет принудительно применить самые свежие групповые политики:
- Выполнение команд от имени системной учетной записи. Пример: следующая команда заставит удаленную систему принудительно проверить обновления:
- Копирование выполняемой программы на удаленный компьютер перед выполнением. Пример: следующая команда позволит обновить членство данного компьютера в группе безопасности Active Directory (токен доступа) без перезагрузки:
Трудно переоценить пользу этой программы, если использовать скрипты и возможности консольных команд, встроенных в Windows.
Используем Invoke-Command для параллельного запуска команд на нескольких компьютерах
Командлет Invoke-Command можно использовать для параллельного выполнения команд на нескольких удаленных компьютерах.
В самом просто случае имена компьютеров, на которых нужно выполнить команды указываются через запятую:
Invoke-Command server1, server2, server3 -ScriptBlock {get-date}
1 | Invoke-Command server1,server2,server3-ScriptBlock{get-date} |
Список компьютеров можно поместить в переменную (массив):
$servers = @(″server1″,″server2″,″server3″)
Invoke-Command —ScriptBlock { get-date} -ComputerName $servers
1 |
$servers=@(″server1″,″server2″,″server3″) Invoke-Command-ScriptBlock{get-date}-ComputerName$servers |
Или получить из текстового файла:
Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName(Get-Content c:\ps\servers.txt)
1 | Invoke-Command-ScriptBlock{Restart-Service spooler}-ComputerName(Get-Contentc\ps\servers.txt) |
Также можно получить список компьютеров в ADс помощью командлета Get-ADComputer из модуля AD PowerShell:
Чтобы выполнить команду на всех Windows Server в домене, исопльзуйте такой код:
$computers = (Get-ADComputer -Filter ‘operatingsystem -like «*Windows server*» -and enabled -eq «true»‘).Name
Invoke-Command -ComputerName $computers -ScriptBlock {get-date} -ErrorAction SilentlyContinue
1 |
$computers=(Get-ADComputer-Filter’operatingsystem -like «*Windows server*» -and enabled -eq «true»‘).Name Invoke-Command-ComputerName$computers-ScriptBlock{get-date}-ErrorAction SilentlyContinue |
Если компьютер выключен, или недоступен, благодаря параметру SilentlyContinue скрипт не будет остановлен и продолжит выполнение на других компьютерах.
Чтобы понять с какого компьютера получены результаты, нужно использовать специальную переменную окружения PSComputerName.
$results = Invoke-Command server1, server2, server3 -ScriptBlock {get-date}
$results | Select-Object PSComputerName, DateTime
1 |
$results=Invoke-Command server1,server2,server3-ScriptBlock{get-date} $results|Select-ObjectPSComputerName,DateTime |
При запуске команды через Invoke-Command на нескольких компьютерах она выполняется параллельно. В Invoke-Command есть ограничение на максимальное количество компьютеров, которыми можно управлять одновременно (ограничение на количество одновременных PSSession). Оно определяется параметром ThrottleLimit (по умолчанию 32). Если вам нужно выполнить команду одновременно более чем на 32 компьютерах (например, на 128), используйте параметр –ThrottleLimit 128 (но это вызывает повышенную нагрузку на ваш компьютер).
Для запуска команд на удаленных компьютерах через Invoke-Command в фоновом режиме используется специальный атрибут
–AsJob. В этом случае результат выполнения команды не возвращается в консоль. Чтобы получить результаты нужно использовать командлет
Receive-Job.
Командлеты PowerShell для удаленного управления
С помощью Windows PowerShell можно выполнять команды не только на локальном компьютере, но и на одном или даже на нескольких удаленных компьютерах.
- Enter-PSSession — запускает интерактивный сеанс с удаленным компьютером;
- Exit-PSSession — завершает интерактивный сеанс с удаленным компьютером;
- New-PSSession — создает постоянное подключение к локальному или удаленному компьютеру;
- Remove-PSSession — закрывает один или несколько сеансов Windows PowerShell;
- Disconnect-PSSession — отсоединяется от сеанса;
- Connect-PSSession — подключается к отключенным сеансам;
- Get-PSSession — получает сеансы Windows PowerShell на локальных и удаленных компьютерах;
- Invoke-Command — выполняет команды на локальном и удаленных компьютерах.
Работа со службами и процессами
PowerShell, конечно же, умеет управлять службами и процессами в Windows, для этого существуют такие командлеты как:
- Get-Process – выводит информацию о запущенных процессах на компьютере;
- Start-Process – запускает один или несколько процессов на компьютере;
- Stop-Process — останавливает один или несколько запущенных процессов;
- Get-Service – выводит информацию о службах;
- Restart-Service – перезапускает службу;
- Start-Service – запускает службу;
- Stop-Service — останавливает службу;
- Suspend-Service – приостанавливает работу службы;
- Set-Service – с помощью данного командлета можно изменить свойства службы, например, описание, отображаемое имя и режим запуска. Также его можно использовать для запуска, остановки или приостановки службы.
Можно ли ограничить команды, которые пользователи могут запускать удаленно на моем компьютере?
Да. Каждый удаленный сеанс должен использовать одну из конфигураций сеанса на удаленном компьютере. Вы можете управлять конфигурациями сеансов на компьютере (и разрешениями для этих конфигураций сеанса), чтобы определить, кто может выполнять команды удаленно на компьютере и какие команды они могут выполняться.
Конфигурация сеанса настраивает среду для сеанса. Конфигурацию можно определить с помощью сборки, реализующей новый класс конфигурации, или с помощью скрипта, выполняемого в сеансе. Конфигурация может определять команды, доступные в сеансе. Кроме того, конфигурация может включать параметры, защищающие компьютер, такие как параметры, ограничивающие объем данных, которые сеанс может получить удаленно, в одном объекте или команде. Можно также указать дескриптор безопасности, который определяет разрешения, необходимые для использования конфигурации.
Командлет создает конфигурации сеансов по умолчанию на компьютере: Microsoft. PowerShell, Microsoft. PowerShell. Workflow и Microsoft. PowerShell32 (только 64-разрядные операционные системы). Задает дескриптор безопасности для конфигурации, чтобы разрешить использовать их только членам группы «Администраторы» на компьютере.
Командлеты конфигурации сеанса можно использовать для изменения конфигураций сеансов по умолчанию, создания новых конфигураций сеансов и изменения дескрипторов безопасности всех конфигураций сеансов.
Начиная с Windows PowerShell 3,0, командлет позволяет создавать пользовательские конфигурации сеансов с помощью текстового файла. Файл содержит параметры для настройки языкового режима и для указания командлетов и модулей, доступных в сеансах, использующих конфигурацию сеанса.
Когда пользователи используют командлеты,, или , они могут использовать параметр configurationName для указания конфигурации сеанса, используемой для сеанса. Кроме того, они могут изменить конфигурацию по умолчанию, которую используют сеансы, изменив значение переменной предпочтений в сеансе.
Дополнительные сведения о конфигурациях сеансов см. в справке по командлетам конфигурации сеанса. Чтобы найти командлеты конфигурации сеанса, введите:
Как фильтровать через Powershell файлы открытые по сети
Мы можем получить данные только по определенному свойству. Т.е. это могут быть файлы открытые определенным пользователем, компьютером, с каким-то расширением и т.д. Для того что бы увидеть все свойства объекта нужно сделать следующее:
Все что выделено — это свойство, которое мы можем вывести или отфильтровать по нему. Например я хочу вывести все компьютеры с которых выполнено подключение:
Меня могут не интересовать все компьютеры, а только файлы открытые с определенного адреса:
Таким образом я вывел все сессии, где свойство ClientComputerName заканчивается на 3.1.
Аналогично мы можем найти всех пользователей:
Если нам нужно найти, например, конкретный файл или расширение, то мы можем воспользоваться свойством Path или ShareRelativePath:
Таким образом я нашел все сессии, где открытый файл заканчивается на txt.