Powershell server: PowerShell Server | Remote PowerShell Over SSH
Содержание
Запуск простого HTTP веб-сервера средствами PowerShell
В целях тестирования или в качестве простой заглушки на этапе развертывания сервиса у меня периодически возникает необходимость в запуске простого веб сервера на Windows. Чтобы не устанавливать на хосте полноценный IIS, вполне можно запустить простейший HTTP веб сервер прямо из консоли PowerShell. Такой веб сервер можно запустить на любом TCP порту с помощью встроенного .NET класса System.Net.HttpListener.
Откройте консоль PowerShell и создайте прослушиватель Http:
$httpListener = New-Object System.Net.HttpListener
Затем нужно указать на каком порту должен слушать ваш листенер. В нашем примере я хочу запустить HTTP веб сервер на порту 9090:
$httpListener.Prefixes.Add("http://localhost:9090/")
Запускаем прослушиватель:
$httpListener.Start()
Вы можете использовать в объекте HttpListener различные виды аутентификации (Basic, Digest, Windows, Negotiate, или NTLM) и также привязать SSL сертификат для доступа по HTTPS.
Если выполнить этот код, в Windows появится отдельный процесс, который ожидает подключения на порту 9090. Проверьте это с помощью команды:
nestat –na 9090
или выведите список открытых портов с помощью PowerShell:
Get-NetTCPConnection -State Listen | Select-Object -Property LocalAddress, LocalPort, State | Sort-Object LocalPort |ft
Теперь создайте на диске текстовый файл с HTML кодом, который должен отобразить ваш веб-сервер. Например:
<!DOCTYPE html> <html> <head> <title> Light PowerShell Web Server</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> body {background-color:#ffffff;background-repeat:no-repeat;background-position:top left;background-attachment:fixed;} h2{font-family:Arial, sans-serif;color:#000000;background-color:#ffffff;} p {font-family:Georgia, serif;font-size:14px;font-style:normal;font-weight:normal;color:#000000;background-color:#ffffff;} </style> </head> <body> <h2>Test web page </h2> <p>This web page was generated from PowerShell using the System. Net.HttpListener class</p> </body> </html>
Я сохранил этот HTML код в файл C:\PS\testwebpage.html в кодировке UTF8.
Теперь выполните следующие команды, чтобы прочитать ваш html файл и отправить ответ в браузер пользователя.
$context = $httpListener.GetContext()
$context.Response.StatusCode = 200
$context.Response.ContentType = 'text/HTML'
$WebContent = Get-Content -Path "C:\PS\testwebpage.html" -Encoding UTF8
$EncodingWebContent = [Text.Encoding]::UTF8.GetBytes($WebContent)
$context.Response.OutputStream.Write($EncodingWebContent , 0, $EncodingWebContent.Length)
$context.Response.Close()
Откройте URL адрес вашего HTTP сервера в браузере (http://localhost:9090) или получите содержимое веб страницы с помощью PowerShell. Данный скрипт вернет HTML код только один раз после чего ваш слушатель будет остановлен автоматически (обрабатывается только один запрос пользователя).
Освободите TCP порт:
$httpListener. Close()
Если нужно, чтобы HTTP сервер возвращал вашу страничку постоянно, нужно добавить PowerShell код в цикл. В следующем примере HTTP сервер будет запущен в цикле, который завершается при нажатии любой клавиши в консоль PowerShell.
write-host "Press any key to stop HTTP listener after next request"
while (!([console]::KeyAvailable)) {
$context = $httpListener.GetContext()
$context.Response.StatusCode = 200
$context.Response.ContentType = 'text/HTML'
$WebContent = Get-Content -Path "C:\PS\testwebpage.html" -Encoding UTF8
$EncodingWebContent = [Text.Encoding]::UTF8.GetBytes($WebContent)
$context.Response.OutputStream.Write($EncodingWebContent , 0, $EncodingWebContent.Length)
$context.Response.Close()
Write-Output "" # Newline
}
$httpListener.Close()
Такой HTTP сервер на PowerShell будет жить пока вы не закроете консоль PowerShell или не закроете сеанс методом
.Close
.
Этот PowerShell скрипт можно запустить как службу Windows.
Такой легкий веб сервер можно запустить на любом хосте Windows без необходимости установки роли Internet Information Services или других сторонних программ. Права администратора также н не нужны. Можно использовать такой HTTPListener в качестве простейшего REST сервера или для получения информации с компьютера через HTTP.
Информация о серверах в PowerShell / Песочница / Хабр
Всем привет! Это мой первый пост и в нём я хотел бы поделиться скриптом на PowerShell, который написал для получения информации о Windows серверах, а именно: имени сервера, количества ядер в нём, объёме дисков и свободного пространства на них, ОЗУ и модели сервера. Бывает что данная информация нужна для тех или иных целей и данный скрипт поможет получить её быстро и легко.
Скрипт протестировал в обычной оболочке PowerShell на Windows Server 2016 и Windows Server 2019, выдаёт ровную таблицу, которую легко можно скопировать в Excel и разбить по столбцам для удобной фильтрации по нужным параметрам. Единственное нужно убрать из скрипта добавление фразы «Гб», так как иначе Excel не сможет фильтровать по числам. В приведённом здесь варианте убирать не стал, так красивее выглядит вывод в оболочке PowerShell 🙂 Так же хотелось бы добавить что в PowerShell ISE имеются смещения, видимо чистая оболочка PowerShell и оболочка PowerShell ISE по разному считают после какого количества символов нужно вставлять горизонтальную табуляцию.
Так же данный скпипт можно запускать на любом компьютере в домене в оболочке PowerShell от имени администратора домена, при этом нужно чтобы на серверах была включена служба WinRM, иначе «достучаться» до данных серверов не получится и скпирт пропустит такие сервера, не выведя о них информацию.
Так выглядит вывод скрипта (имена серверов скрыл)
Собственно сам скрипт:
$servers = @(Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"' -Properties Name | select -ExpandProperty Name) "Name server:" + "`t" + "Count cores:" + "`t" + "Drive letter:" + "`t" + "HDD:" + "`t" + "`t" + "Free HDD:" + "`t" + "RAM:" + "`t" + "Model:" foreach ($server in $servers) { $NumberOfCores = Invoke-Command -ScriptBlock { (Get-CimInstance -ClassName Win32_Processor). NumberOfCores } -computername $server -ErrorAction Ignore $DeviceID = Invoke-Command -ScriptBlock { (Get-CimInstance -ClassName Win32_LogicalDisk).DeviceID } -computername $server -ErrorAction Ignore $FreeSpace = Invoke-Command -ScriptBlock { (Get-CimInstance -ClassName Win32_LogicalDisk).FreeSpace } -computername $server -ErrorAction Ignore $Size = Invoke-Command -ScriptBlock { (Get-CimInstance -ClassName Win32_LogicalDisk).Size } -computername $server -ErrorAction Ignore $PhysicalMemory = Invoke-Command -ScriptBlock { (Get-CimInstance -ClassName Win32_PhysicalMemory).Capacity } -computername $server -ErrorAction Ignor $Model = Invoke-Command -ScriptBlock { (Get-CimInstance -ClassName Win32_computersystem).Model } -computername $server -ErrorAction Ignor $Cores = 0 foreach ($Core in $NumberOfCores) { $Cores = $Cores + $Core } $Count = 0 if ($DeviceID -ne $null) { if ($DeviceID[1] -ne ":") { $memorys = 0 foreach ($memory in $PhysicalMemory) { $memorys = $memorys + $memory } while ($Count -ne $DeviceID. Length) { if ($FreeSpace[$Count] -ne $null) { if ($server.Length -le 7) { [string]$NSize = [math]::Round(($Size[$Count]/1024/1024/1024), 0) [string]$NFreeSpace = [math]::Round(($FreeSpace[$Count]/1024/1024/1024), 0) [string]$Nmemorys = [math]::Round(($memorys/1024/1024/1024), 0) if ($NSize.Length -le 4) { if ($NFreeSpace.Length -le 4) { $server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } else { $server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } } else { if ($NFreeSpace. Length -le 4) { $server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } else { $server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } } } else { [string]$NSize = [math]::Round(($Size[$Count]/1024/1024/1024), 0) [string]$NFreeSpace = [math]::Round(($FreeSpace[$Count]/1024/1024/1024), 0) [string]$Nmemorys = [math]::Round(($memorys/1024/1024/1024), 0) if ($NSize.Length -le 4) { if ($NFreeSpace.Length -le 4) { $server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } else { $server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } } else { if ($NFreeSpace. Length -le 4) { $server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } else { $server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } } } } $Count++ } } else { $memorys = 0 foreach ($memory in $PhysicalMemory) { $memorys = $memorys + $memory } while ($Count -ne $DeviceID.Length-1) { if ($server.Length -le 7) { [string]$NSize = [math]::Round(($Size[$Count]/1024/1024/1024), 0) [string]$NFreeSpace = [math]::Round(($FreeSpace[$Count]/1024/1024/1024), 0) [string]$Nmemorys = [math]::Round(($memorys/1024/1024/1024), 0) if ($NSize. Length -le 4) { if ($NFreeSpace.Length -le 4) { $server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } else { $server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } } else { if ($NFreeSpace.Length -le 4) { $server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } else { $server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } } } else { [string]$NSize = [math]::Round(($Size[$Count]/1024/1024/1024), 0) [string]$NFreeSpace = [math]::Round(($FreeSpace[$Count]/1024/1024/1024), 0) [string]$Nmemorys = [math]::Round(($memorys/1024/1024/1024), 0) if ($NSize. Length -le 4) { if ($NFreeSpace.Length -le 4) { $server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } else { $server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } } else { if ($NFreeSpace.Length -le 4) { $server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } else { $server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model } } } $Count++ } } } }
сервер PowerShell | Удаленный PowerShell через SSH
Терминальный сервер PowerShell SSH
PowerShell Server — это мощное решение SSH, которое позволяет администраторам и другим ИТ-специалистам безопасно управлять удаленными компьютерами Windows с помощью упрощенного интерфейса командной строки PowerShell.
PowerShell Server — это полнофункциональный сервер SSH 2.0, который позволяет рабочим столам и серверам Windows использовать безопасную удаленную точку входа на хост Windows PowerShell. Это дает пользователям возможность безопасного удаленного управления Windows через PowerShell с любого стандартного клиента SSH, включая: PuTTY, OpenSSH, iPhone, Blackberry, машины Linux/Unix, а также наши собственные клиентские решения SSH.
В дополнение к терминальному доступу прилагаемые командлеты безопасного удаленного доступа работают с PowerShell Server, предоставляя простую в использовании альтернативу WinRM для PowerShell Remoting. PowerShell Server может действовать как автономный сервер или может передавать удаленные объекты через включенный командлет SSHRunspace, что позволяет безопасное удаленное взаимодействие SSH.
- Поддержка Secure Shell (SSH) версии 2.0.
- Запускать как службу Windows или как отдельное пользовательское приложение.
- Безопасное удаленное подключение к Windows PowerShell с любого стандартного SSH-клиента, в том числе: iPhone, Blackberry, Linux/Unix и т. д.
- Поддержка открытого ключа, пароля и проверки подлинности GSSAPI (NTLM и Kerberos).
- Надежное шифрование 3DES, проверка целостности сообщений, безопасный обмен секретными ключами
- .
- Неограниченное количество одновременных удаленных подключений (в зависимости от уровня лицензии).
- Простая в использовании, легкая и безопасная альтернатива WinRM для удаленного взаимодействия PowerShell.
- Командлеты с поддержкой SSH для доступа с помощью сценариев к серверу PowerShell, доступные через NetCmdlets.
- Программный доступ к PowerShell Server из технологий разработчиков, включая ActiveX, Delphi, C++, Java и т. д., через IPWorks SSH.
Поддержка туннеля SSH
Удаленное взаимодействие
Когда командлет SSHRunspace подключается к серверу PowerShell, объекты в удаленной оболочке сериализуются в формате XML и возвращаются через безопасное соединение SSH. На стороне клиента SSHRunspace будет прозрачно десериализоваться в PSObjects с соответствующими полями, соответствующими удаленным объектам. Возвращенные объекты могут быть конвейеризированы, оценены и сохранены как любой другой объект PSObject.
Безопасная передача файлов (SFTP)/сервер SCP
Сервер PowerShell можно использовать для простого добавления возможностей сервера безопасной передачи файлов (SFTP)/SCP в Windows. PowerShell Server — это сервер SFTP/SCP, который работает «из коробки» с минимальной конфигурацией. Для расширенных сценариев поддерживается контроль над такими элементами, как алгоритмы и методы проверки подлинности. Вы также можете расширить функциональность с помощью пользовательских скриптов.
Функции SFTP-сервера
- Сервер SFTP/SCP с поддержкой PowerShell.
- Сжатие передачи Zlib.
- AES и 3DES.
- Аутентификация открытого ключа и пароля.
- Поддержка адресации IPV6.
- Криптография, подтвержденная FIPS 140-2
- Управление пользователями Windows.
Шифрование
Что такое SFTP с поддержкой PowerShell?
PowerShell Server настраивается с помощью сценария PowerShell, который обеспечивает перехват всех наиболее распространенных событий, связанных с SFTP-подключением и передачей файлов. В результате можно легко расширить и интегрировать возможности SFTP сервера PowerShell с внутренними системами для обмена сообщениями, автоматизации, аутентификации и многого другого.
Например, предположим, что администратор хотел бы зарегистрировать, отправить по электронной почте или отправить какое-либо мгновенное сообщение, когда файл был загружен. Администратор может вставить сценарий в событие конфигурации FileClose и выполнить собственный сценарий PowerShell, чтобы добавить эту функцию.
функция Confirm-FileClose($sftpArgs) { # $sftpArgs.connectionId: идентификатор соединения # $sftpArgs.user: имя пользователя # $sftpA rgs.path: виртуальный путь к файлу или каталогу # $sftpArgs.statusCode: результат операции # $sftpArgs.physicalPath: физический путь к открытому файлу $sftpArgs.statusCode = $SSH_FXS_OK # Выполнить сценарий или пользовательское действие… }
Эта мощная расширяемость открывает множество возможностей для интеграции. Например, вместо того, чтобы обслуживать файлы из файловой системы, PowerShell Server может действовать как виртуальная файловая система, извлекая и обслуживая файлы из другого источника, например базы данных SQL. Почти каждый аспект SFTP-сервера можно настраивать и расширять с помощью PowerShell.
Безопасные ресурсы для удаленного доступа
PowerShell Server предоставляет два механизма для защиты локальных ресурсов для удаленного доступа: обратные туннели SSH и туннели SSL .
Использование обратного туннеля SSH предоставляет проверенный временем способ предоставления доступа к локальному ресурсу клиентам за пределами вашей сети безопасным и надежным способом. Это достигается без необходимости изменения брандмауэра.
Использование SSL-туннелей обеспечивает внешний сервер SSL/TLS для защиты небезопасного ресурса. Этот подход быстро добавляет уровень безопасности к ресурсу, сохраняя при этом простой дизайн.
Особенности
- Построено на основе проверенного временем ядра SSH, доступного в программном обеспечении /n.
- Полностью настраиваемые параметры безопасности (алгоритмы шифрования, алгоритмы обмена ключами и т. д.).
- Автоматическое управление соединением для восстановления разорванных соединений.
- Поддерживает любое количество туннелей одновременно.
- поддерживают новейшие отраслевые стандарты, включая SHA2 и TLS 1. 2.
- SSL-туннели позволяют точно контролировать параметры протокола TLS.
- Используйте туннели для защиты устаревших приложений с помощью TLS 1.2.
SSL-туннели
Обратные туннели SSH
Обратный туннель SSH сервера PowerShell перенаправляет трафик на локальные серверы/машины и от них через защищенный канал SSH.
Настроить обратные туннели SSH очень просто. Все, что вам нужно сделать, это указать информацию и учетные данные вашего SSH-сервера, а также удаленный порт, на который вы хотите получать трафик. После того, как туннель установлен, любой трафик, отправляемый на узел SSH через порт, указанный во время настройки, будет отправляться через SSH на сервер PowerShell. Затем этот трафик автоматически перенаправляется на локальный сервер. С точки зрения клиента, они взаимодействуют напрямую с сервером за вашим брандмауэром.
Подробные инструкции по настройке и использованию обратных туннелей SSH см. в Руководстве по началу работы.
SSL-туннели
SSL-туннели предоставляют простой способ добавить уровень безопасности с помощью SSL/TLS. После настройки PowerShell Server будет действовать как «посредник» между входящими подключениями и локальными серверами/хостами. PowerShell будет прослушивать указанный порт для входящих подключений и защищать эти подключения с помощью SSL/TLS. Это защищает связь между клиентом и сервером PowerShell. Затем связь перенаправляется на локальный сервер/хост по стандартному протоколу TCP/IP.
Подробные инструкции по настройке и использованию туннелей SSL см. в Руководстве по началу работы.
Динамическая публикация ASP.NET
PowerShell Server включает ASP-подобный язык шаблонов на основе PowerShell для создания веб-приложений и обеспечения доступности сценариев PowerShell в Интернете. Этот язык шаблонов, PowerShell ASP, содержит смесь разметки и встроенного сценария PowerShell. Вы можете использовать PowerShell ASP внутри существующих приложений или создавать полные приложения с нуля на основе только веб-страниц PowerShell. PowerShell Server даже поставляется в комплекте с облегченным веб-сервером, позволяющим пользователям запускать сценарии PowerShell в Интернете без накладных расходов и требований к настройке Microsoft IIS.
Веб-публикация PowerShell работает на платформе ASP.NET и реализована в виде пользовательского обработчика IHttpHandler, сопоставленного с файлами *.ps1x. Благодаря этому вы можете смешивать страницы веб-публикации PowerShell с любым приложением ASP.NET. Это дает отличный способ использовать PowerShell Web Publishing в ваших существующих приложениях по мере необходимости, или вы можете создавать полные приложения с нуля на основе только страниц *.ps1x.
Начало работы с PowerShell Server
Введение
PowerShell Server — это полнофункциональный сервер SSH 2. 0, который позволяет рабочим столам и серверам Windows использовать безопасную удаленную точку входа на хост Windows PowerShell. Это дает пользователям возможность безопасного удаленного управления Windows через PowerShell с любого стандартного клиента SSH, включая: PuTTY, OpenSSH, iPhone, Blackberry, машины Linux/Unix, а также наши собственные клиентские решения SSH.
В этом учебном пособии вы узнаете, как настроить PowerShell Server и как использовать многие параметры.
Содержание
- Настройка сервера PowerShell
- Запуск в качестве службы Windows
- Протокол безопасного копирования (SCP)
- Туннель SSH
- SFTP-сервер
- Выполнение профиля PowerShell
- Аутентификация
- Аутентификация по паролю
- Аутентификация с открытым ключом
- Аутентификация GSSAPI (NTLM/Kerberos)
- PowerShell ASP
- Веб-сервер PowerShell ASP
- Создание ASP-страниц PowerShell
- Размещение PowerShell ASP в IIS
- Панель PowerShell
- Дополнительная информация
Настройка PowerShell Server
При первом запуске PowerShell Server следует сначала перейти на вкладку Параметры сервера, чтобы выбрать цифровой сертификат X. 509, который будет использоваться сервером для защиты соединений SSH. По умолчанию программа установки установит и настроит приложение для использования прилагаемого тестового сертификата testcert.pfx. Кроме того, вы можете сгенерировать новый сертификат или выбрать ранее сгенерированный.
Вам также потребуется настроить группу безопасности, которая будет использоваться для управления тем, какие пользователи могут подключаться к службе. Это можно сделать на вкладке Authentication .
После настройки этих параметров нажмите кнопку Сохранить изменения на панели инструментов, чтобы сохранить изменения. На этом этапе вы должны быть готовы запустить сервер и прослушивать соединения SSH. Кнопки Start , Restart и Stop можно использовать для управления прослушиванием сервером или нет.
Запуск в качестве службы Windows
Если параметр Запуск в качестве службы Windows на вкладке Служба НЕ выбран, прослушиватель SSH будет запускаться в процессе внутри приложения PowerShell Server. Это означает, что для удаленного подключения к вашему компьютеру вы должны войти в систему и должно быть запущено приложение PowerShell Server (и запущен прослушиватель). Этот режим работы может быть очень удобен для настольного использования.
Однако для серверов лучше включить параметр «Запуск в качестве службы Windows ». В этом режиме прослушиватель SSH (и любые подключенные сеансы PowerShell) не запускаются на рабочем столе. Вместо этого настроена служба Windows, которая может работать все время, даже если ни один пользователь не вошел в систему на консоли сервера. Когда этот параметр включен, кнопки Start/Restart/Stop в пользовательском интерфейсе PowerShell фактически управляют службой Windows.
Службой Windows также можно управлять из командной строки, указав servicestart или servicestop параметры командной строки. Например, чтобы запустить службу:
PowerShellServer.exe /servicestart
И чтобы остановить службу:
PowerShellServer. exe /servicestop
SSH Tunnel
Установив флажок Enable SSH Tunnel Support в опции 176 Настройки сервера , вы можете разрешить использование туннелей SSH. создается через сервер. Это позволяет клиентам, поддерживающим создание туннелей SSH, устанавливать туннель через сервер PowerShell. Это распространенный подход к защите незащищенного подключения к ресурсу.
SFTP-сервер
Чтобы включить SFTP-сервер, установите флажок Включить поддержку SFTP на вкладке SFTP . Используя это, любой SFTP-клиент сможет подключаться и передавать файлы на сервер и с него.
По умолчанию корневой каталог SFTP будет использовать переменную среды «windir». Обычно это C:\ . Вы можете установить корневой каталог SFTP в разделе Настройки корневого каталога на вкладке SFTP .
Протокол защищенного копирования (SCP)
На вкладке SFTP флажок Включить поддержку протокола защищенного копирования (SCP) определяет, включена ли передача файлов через SCP. Это можно использовать с командлетами Send-PowerShellServerFile и Get-PowerShellServerFile, включенными в NetCmdlets, или с другими клиентами SCP командной строки.
Выполнение профиля PowerShell
Профили PowerShell, которые будут выполняться при подключении, можно указать с помощью Выполнить профили PowerShell для параметра Connection на вкладке Other . Можно указать следующие профили:
- nsoftware.PowerShell_profile.ps1 — используется только для интерактивных сеансов.
- nsoftware.PSExec_profile.ps1 — используется только для соединений exec и командлетов PowerShell Server.
Профили сначала будут загружены из расположения %SystemRoot%\System32\WindowsPowerShell\v1.0 , а затем Расположение %UserProfile%\Documents\WindowsPowerShell .
Аутентификация
PowerShell Server поддерживает три механизма аутентификации: имя пользователя/пароль, GSSAPI и аутентификация с открытым ключом.
Аутентификация по паролю
Клиенты, подключающиеся к серверу, должны предоставить комбинацию имени пользователя и пароля. Затем учетные данные проверяются с помощью механизмов проверки подлинности Windows, чтобы убедиться, что они соответствуют действительной локальной учетной записи на сервере или в доверенном ему домене.
Подключающиеся клиенты также авторизуются путем проверки членства указанного пользователя в специальной группе. Локальную/доменную группу безопасности, используемую для авторизации, можно выбрать на вкладке «Подключение» в пользовательском интерфейсе сервера.
Аутентификация GSSAPI (NTLM/Kerberos)
Аутентификацию NTLM или Kerberos можно включить, установив флажок Включить аутентификацию GSSAPI на вкладке Безопасность и выбрав нужный Поддерживаемые механизмы .
Обратите внимание, что при использовании Kerberos в качестве механизма проверки подлинности рекомендуется запускать PowerShell Server как службу. Если служба запущена не в качестве службы, а под учетной записью пользователя, используемый по умолчанию формат SPN (имя субъекта-службы) host/machine@domain может привести к ошибкам. В этом случае необходимо зарегистрировать новое имя участника-службы (например, ssh/machine) на контроллере домена и установить параметр реестра KerberosSPN для PowerShell Server. Кроме того, любой подключающийся SSH-клиент должен быть настроен на использование вновь определенного имени участника-службы.
Аутентификация с открытым ключом
Если в пользовательском интерфейсе сервера включена аутентификация с открытым ключом, при подключении к серверу также может выполняться аутентификация с использованием стандартного механизма аутентификации с открытым ключом, поддерживаемого протоколом SSH, вместо предоставления пароля.
PowerShell Server поддерживает аутентификацию с открытым ключом на основе файлов, аналогичную OpenSSH. То есть вы должны указать файл открытого ключа, сгенерированный с помощью такого инструмента, как PuTTYgen. Это можно настроить следующим образом:
- Установите флажок Включить аутентификацию с открытым ключом на вкладке Безопасность и выберите параметр Аутентификация с открытым ключом на основе файлов .
- Выберите файл ключей, содержащий список открытых ключей SSH. Файл должен содержать один ключ в строке и должен быть отформатирован следующим образом:
ssh-rsa AAAAB3NzaC1yc2EA...rPFBe7Pnc= rsa-key-20110822
- Подключиться, используя закрытый ключ, который соответствует одному из открытых ключей в указанном файле.
Аутентификация с открытым ключом на основе Магазина Windows также поддерживается при выборе параметра Аутентификация с открытым ключом на основе Магазина Windows и выборе нужного типа и имени хранилища.
При проверке подлинности с открытым ключом подключающимся клиентам достаточно указать имя пользователя и продемонстрировать, что у них есть закрытый ключ, соответствующий открытому ключу, известному серверу.
PowerShell ASP
PowerShell ASP — это ASP-подобный язык шаблонов для веб-приложений. Шаблоны PowerShell ASP содержат смесь разметки (HTML, XML или чего угодно, что вы хотите сгенерировать) и встроенного сценария PowerShell. Вы можете использовать PowerShell ASP внутри существующих приложений или создавать полные приложения с нуля на основе только страниц PowerShell ASP.
PowerShell ASP также позволяет создавать и обслуживать каналы RSS и Atom из сценариев PowerShell, выполняемых на веб-сервере ASP.NET. Каналы создаются автоматически на основе объектов, возвращаемых выполнением сценария PowerShell в конвейере PowerShell.
Веб-сервер PowerShell ASP
Чтобы включить веб-сервер PowerShell ASP, установите флажок Включить PowerShell ASP на вкладке ASP . На этой вкладке вы также можете указать максимальное количество подключений к серверу, а также номера портов, которые веб-сервер будет прослушивать.
После включения веб-сервера просто поместите страницы в корневую папку (т. е. в папку «www», расположенную в каталоге установки), как и на любом другом веб-сервере.
Страницы PowerShell ASP также можно размещать с помощью IIS, а не с сервера PowerShell, что обсуждается в разделе Размещение PowerShell ASP в IIS.
Создание страниц PowerShell ASP
Страницы PowerShell ASP представляют собой простые текстовые файлы с расширением *.ps1x, которые содержат как разметку, так и фрагменты обычного кода PowerShell, взаимодействующие друг с другом. В отличие от ASP.NET, для страниц PS1X не существует модели «код позади»; в этом смысле они больше напоминают классическую модель ASP.
Вот очень простая страница PS1X:
Как видите, все это HTML-разметка вплоть до раздела <%= %>, что означает «вычислить это выражение PowerShell и вывести результат». В этом случае выражение использует встроенный объект запроса ASP.NET для запроса данных, поступающих в строку запроса URL-адреса.
Вы также можете создавать полные блоки кода, которые включают любое другое выражение PowerShell или конструкцию управления потоком, и даже смешивать их с кодом разметки. Например, вот простая страница, на которой будет представлен список запущенных процессов на машине:
ID | Имя |
Каналы RSS и Atom также можно создавать с помощью ASP-страниц PowerShell. Дополнительные сведения см. в справочном файле PowerShell Server.
Размещение PowerShell ASP в IIS
Страницы PowerShell ASP могут размещаться непосредственно в IIS. Для этого вам просто нужно добавить PowerShell ASP в качестве HttpHandler в ваш файл Web.config.
Интегрированный конвейерный режим IIS 7 и IIS 8
- Создание нового веб-сайта или приложения ASP.NET.
- Добавьте ссылку на PowerShellASP.dll или скопируйте ее в папку ./bin вашего веб-сайта.
- Зарегистрируйте обработчики HttpHandler ASP PowerShell в файле web.config:
IIS 6
- Создайте новый веб-сайт или приложение ASP. NET.
- Добавьте ссылку на PowerShellASP.dll или скопируйте ее в папку ./bin вашего веб-сайта.
- Зарегистрируйте обработчики HttpHandler ASP PowerShell в файле web.config:
Панель PowerShell
Панель PowerShell — это простой в использовании веб-элемент управления ASP.NET Panel для интеграции содержимого PowerShell в страницы и приложения ASP.NET. Это позволяет использовать сочетание HTML и встроенного сценария PowerShell для быстрого создания областей динамического содержимого.
Чтобы использовать панель PowerShell, просто добавьте ссылку на nsoftware.PowerShellASP.dll в свое приложение или скопируйте его в папку ./bin вашего веб-сайта. Затем на странице ASP.NET или элементе управления, который вы хотите использовать с помощью панели PowerShell, добавьте следующий код для регистрации элемента управления:
.
Затем просто напишите свой ASP-скрипт PowerShell прямо в панель:
Панель PowerShell — использование альтернативного синтаксиса
Иногда вам может понадобиться избежать необходимости экранировать HTML при написании сценариев PowerShell ASP в элементах управления PowerShellPanel, особенно символов < и >.