Разработка командлетов PowerShell для сервера NanoServerDeveloping PowerShell Cmdlets for Nano Server. Командлеты powershell


Сетевые командлеты PowerShell – 🖧 Полигон 218

1. Test-Connection

На замену утилите ping в PowerShell пришел командлет Test-Connection, входящий в состав модуля Microsoft.PowerShell.Management. Для примера пропингуем сервер SRV3 командой:

Test-Connection -ComputerName SRV3

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

Test-Connection -ComputerName SRV3, SRV4

или считав из файла:

Test-Connection -ComputerName (Get-Content serverlist.txt)

Еще командлет умеет запускать проверку сразу с нескольких точек. Например, для проверки сервера SRV4 с локального компьютера и с сервера SRV3 воспользуемся следующей командой:

Test-Connection -Source localhost, SRV3 -ComputerName SRV4

Параметр -Source появился только в PS 3.0. В некоторых случаях очень удобно, однако при его использовании может понадобится ввести учетные данные:

Test-Connection -Source localhost, SRV3 -ComputerName SRV4 -Credential Contoso\administrator

 

Примечание. Командлет использует класс Win32_PingStatus, поэтому для проверки соединения можно воспользоваться командой Get-WmiObject Win32_PingStatus, ее действие аналогично команде Test-Connection.

Следующее средство, обычно применяемое после ping — это трассировка с помощью утилиты tracert. В PowerShell для этих целей можно задействовать командлет Test-NetConnection из модуля NetTCPIP. Не смотря на похожее название, по функционалу он довольно сильно отличается от предыдущего командлета, хотя включает в себя и его возможности. Кроме проверки TCP соединения вывод может включать в себя список IP интерфейсов, разрешение DNS-имен (DNS lookup), правила IPsec и проверку возможности установления соединения. В самом простом варианте команда выглядит так:

Test-NetConnection -ComputerName ya.ru

Для пошагового вывода в стиле tracert можно сделать так:

Test-NetConnection -ComputerName ya.ru -TraceRoute

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

Test-NetConnection -ComputerName ya.ru -Port 80 -InformationLevel Detailed

2. Get-NetIPConfiguration

Первое, для чего используют Ipconfig — это просмотр сетевых настроек. В PowerShell для этих целей можно воспользоваться командлетом Get-NetIPConfiguration. Так для подробного вывода настроек для всех сетевых интерфейсов (аналог ipconfig /all) введем команду:

Get-NetIPConfiguration -All -Detailed

 

Для операций с клиентом DNS воспользуется командлетами PowerShell из модуля DNSClient. Для очистки содержимого локального кеша DNS вместо ipconfig /flushdns выполним команду Clear-DnsClientCache, для перерегистрации вместо ipconfig /registerdns — команду Register-DnsClient. Вывести содержимое кеша (ipconfig /displaydns) можно командой Get-DnsClientCache. Также можно выводить не все содержимое кеша, а посмотреть только определенную запись, например:

Get-DnsClientCache -Entry www.bing.ru

3.Resolve-DnsName

Для проверки DNS имен вместо nslookup можно воспользоваться командлетом Resolve-DnsName, входящий в состав модуля DNSClient. Синтаксис у них похожий, например:

Resolve-DnsName -Name SRV3

Можно указать тип записи (A, PTR, SRV), указать, откуда брать данные и выбрать определенный DNS-сервер, отличный от дефолтного:

Resolve-DnsName -Name SRV3 -Type A -DNSOnly -Server 192.168.0.1

4.Get-NetTCPConnection

Утилита Netstat — еще один инструмент сетевой диагностики, показывающий сетевые подключения. Заменим ее командлетом Get-NetTCPConnection. Следующая команда выведет все подключения к интернету, имеющие статус установленных (Established):

Get-NetTCPConnection -State Established -AppliedSettings Internet | ft -auto

5.NetTCPIP

Для управления маршрутизацией вместо утилиты Route воспользуемся несколькими командлетами из модуля NetTCPIP. Для примера попробуем добавить новый постоянный маршрут до сети 172.16.0.0 с маской 255.255.0.0 и шлюзом 192.168.0.1 для интерфейса с номером 3. Вот так это можно сделать с помощью Route:

Route -p add 172.16.0.0 mask 255.255.0.0 192.168.0.1 -if 3

А вот так при использовании PowerShell:

New-NetRoute -DestinationPrefix ″172.16.0.0/16″ -InterfaceIndex 3 -NextHop 192.168.0.1

Для просмотра таблицы маршрутизации вместо route print возьмем командлет Get-NetRoute.  Выведем все маршруты для протокола IPv4 командой:

Get-NetRoute -AddressFamily IPv4 | ft -auto

 

В PS 4.0 появился интересный командлет Find-NetRoute, с помощью которого можно вывести маршрут для одного конкретного  IP-адреса, например:

Find-NetRoute -RemoteAddress 10.0.0.1

Для удаления маршрута (вместо route delete) также есть отдельный командлет Remove-NetRoute, например:

Remove-NetRoute -DestinationPrefix ″172.16.0.0/16″ -InterfaceIndex 3 -NextHop 192.168.0.1 -Confirm:$false

Для изменения уже созданного маршрута вместо route change можно воспользоваться связкой Remove-NetRoute&New-NetRoute.

6.Netsh

Утилита Netsh (Network shell) предназначена для выполнения различных задач по настройке сети. Поскольку функционал ее достаточно широк, для сравнения возьмем одну из типичных задач по настройке сетевого интерфейса.  Предположим, нам необходимо проверить настройки сетевого интерфейса, и если включен DHCP — отключить его и настроить статическую адресацию. С помощью netsh это будет выглядеть следующим образом:

Netsh interface IPv4 show addressesNetsh interface IP set address ″Ethernet″ static 192.168.0.11 255.255.255.0 192.168.0.1Netsh interface IP add DNSServers ″Ethernet″ 8.8.8.8

И тоже самое, но уже с помощью PowerShell:

Get-NetIPAddress -InterfaceIndex 3 -AddressFamily IPv4Set-NetIPInterface -InterfaceIndex 3 -Dhcp disabledNew-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.11 -PrefixLength 24 -DefaultGateway 192.168.0.1Set-DNSClientServerAddress -InterfaceIndex3 -ServerAddresses (″8.8.8.8″)

 

Что интересно, для изменения сетевых настроек придется их удалить и создать заново. Например IP-адрес можно изменить так:

Remove-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.11 -PrefixLength 24 -DefaultGateway 192.168.0.1 -Confirm:$falseNew-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.12 -PrefixLength 24 -DefaultGateway 192.168.0.1 -Confirm:$false

 

Примечание. Для изменения IP-адреса логично было бы воспользоваться специально предназначенным для этого командлетом Set-NetIPAddress, но не тут-то было 🙂 При попытке изменить настройки этот командлет стабильно выдает ошибку. Как выяснилось, этот командлет не может изменить сам IP-адрес, а только некоторые его свойства.

7.Gpupdate и Gpresult

Для обновления групповых политик вместо Gpupdate в модуле GroupPolicy есть командлет Invoke-GPUpdate. Синтаксис у них практически один и тот же, например принудительное обновление политик пользователя выполняется командой:

Gpupdate /target:user /forceInvoke-GPUpdate -Target user -force

Ну и посмотреть результирующие политики вместо Gpresult можно командлетом Get-GPResultantSetOfPolicy. Осуществить вывод результатов в HTML-файл можно командой:

Get-GPResultantSetOfPolicy -ReportType Html -Path C:\gpo.html

CMD vs PowerShell

Как видите, PowerShell вполне в состоянии заменить большинство утилит командной строки. Однако остается еще один вопрос —  зачем это нужно.

В достоинства PowerShell, на мой взгляд, можно записать более структурированный вывод результатов, которые к тому-же можно обрабатывать — фильтровать, сортировать и изменять формат вывода. Кроме того, результатом выполнения команд PowerShell являются объекты, которые можно сохранять в переменные, передавать по конвейеру и т.п. Это очень удобно при написании скриптов.

Из недостатков — большинство описанных в статье команд требуют PowerShell 3.0, а некоторые вообще есть только в четвертой версии. Также некоторые командлеты (напр. Set-NetIPAddress) работают криво не совсем так, как должны.

Ну а на стороне CMD проверенный временем функционал, который есть в любой версии Windows. Кроме того, для простых задач администрирования cmd использовать привычнее, а где-то и удобнее.

Итак, что же лучше — CMD или PowerShell ? Не знаю как вы, а я не готов однозначно ответить на этот вопрос. Впрочем, ничто не мешает нам пользоваться и тем и другим.

poligon218.ru

Интересные примеры на PowerShell. Использование Powershell для выполнения общих сетевых команд. Тестовый опрос компьютера с помощью PowerShell

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

Примечание! Данный справочник составлен на основе командлетов версии PowerShell 5.0 в операционной системе Windows Server 2016 .

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

Автоматически создавать скриншоты и сохранять на диск. Самый простой способ автоматизировать задачи - записывать нажатия клавиш с щелчками мыши, а затем воспроизводить их, когда вам нужно. Использование этой программы может быть довольно сложным в сценариях, но для этого требуется тщательное ознакомление с используемым в нем языком программирования. Подготовительная работа. Щелкните его правой кнопкой мыши и выберите «Редактировать этот скрипт». Он немедленно вносит все изменения в код. Без этой функции вам придется перезапустить скрипт или вызвать команду «Обновить этот сценарий» во всплывающем меню всякий раз, когда вы вносите какие-либо изменения в скрипт.

Полезные командлеты Windows PowerShell

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

  • Get-Help – показывает справку по командлету, функции и общую справку по Windows PowerShell. Справка бывает нескольких типов: краткая, детальная, полная и вывод только примеров;
  • Update-Help - загружает и устанавливает новые файлы справки, т.е. обновление справки;
  • Get-Command – командлет поиска нужной команды, можно искать как по глаголу, так и по существительному, также возможно использование маски, если Вы не знаете точное наименование глагола или существительного;
  • Get-Alias – показывает псевдонимы, все или конкретной команды;
  • Get-PSDrive – показывает подключенные диски;
  • Get-Member – выводит свойства и методы, которые есть у объекта;
  • Get-WindowsFeature – выводит сведения о доступных ролях и компонентах сервера;
  • Install-WindowsFeature (эквивалентен Add-WindowsFeature ) - устанавливает роли или компоненты на указанный сервер;
  • Uninstall-WindowsFeature (эквивалентен Remove-WindowsFeature ) – удаляет роли или компонента сервера;
  • Get-History - возвращает список команд, введенных в ходе текущей сессии.

Работа с переменными

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

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

  • Get-Variable – выводит список переменных и их значения (или одну указанную перем

crabo.ru

Разработка командлетов PowerShell для сервера NanoServer

  • 09/06/2017
  • Время чтения: 17 мин

В этой статье

Область применения: Windows Server2016Applies To: Windows Server 2016

ОбзорOverview

По умолчанию сервер Nano Server включает PowerShell Core во все установки Nano Server.Nano Server includes PowerShell Core by default in all Nano Server installations. PowerShell Core— это сокращенный выпуск PowerShell, который основан на .NET Core и выполняется в сокращенных выпусках Windows, таких как Nano Server и Windows IoT Core.PowerShell Core is a reduced-footprint edition of PowerShell that is built on .NET Core and runs on reduced-footprint editions of Windows, such as Nano Server and Windows IoT Core. PowerShell Core работает точно так же, как другие выпуски PowerShell, такие как Windows PowerShell в Windows Server2016.PowerShell Core functions in the same way as other editions of PowerShell, such as Windows PowerShell running on Windows Server 2016. Однако сокращенный размер Nano Server означает, что в PowerShell Core на базе Nano Server доступны не все возможности Windows Server2016.However, the reduced footprint of Nano Server means that not all PowerShell features from Windows Server 2016 are available in PowerShell Core on Nano Server.

Если вы располагаете командлетами PowerShell, которые требуется запустить на сервере Nano Server, или разрабатываете новые командлеты для этой цели, советы и рекомендации в этом разделе помогут упростить эту задачу.If you have existing PowerShell cmdlets that you'd like to run on Nano Server, or are developing new ones for that purpose, this topic includes tips and suggestions that should help make that easier.

Выпуски PowerShellPowerShell editions

Начиная с версии5.1, среда PowerShell доступна в разных выпусках, обладающих различными наборами функций и совместимостью с платформами.Starting with version 5.1, PowerShell is available in different editions which denote varying feature sets and platform compatibility.

  • Выпуск Desktop: создан на базе платформы .NET Framework и обеспечивает совместимость со сценариями и модулями, предназначенными для версий PowerShell в полноценных выпусках Windows, таких как Server Core и Windows Desktop.Desktop Edition: Built on .NET Framework and provides compatibility with scripts and modules targeting versions of PowerShell running on full footprint editions of Windows such as Server Core and Windows Desktop.
  • Выпуск Core: создан на базе платформы .NET Framework и обеспечивает совместимость со сценариями и модулями, предназначенными для версий PowerShell в сокращенных выпусках Windows, таких как Nano Server и Windows IoT.Core Edition: Built on .NET Core and provides compatibility with scripts and modules targeting versions of PowerShell running on reduced footprint editions of Windows such as Nano Server and Windows IoT.

Запущенный выпуск PowerShell указан в свойстве PSEdition объекта $PSVersionTable.The running edition of PowerShell is shown in the PSEdition property of $PSVersionTable.

$PSVersionTable Name Value ---- ----- PSVersion 5.1.14300.1000 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} CLRVersion 4.0.30319.42000 BuildVersion 10.0.14300.1000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1

Авторы модулей могут объявить их как совместимые с одним или более выпусками PowerShell с помощью ключа манифеста модуля CompatiblePSEditions.Module authors can declare their modules to be compatible with one or more PowerShell editions using the CompatiblePSEditions module manifest key. Этот ключ поддерживается только в PowerShell5.1 или более поздней версии.This key is only supported on PowerShell 5.1 or later.

New-ModuleManifest -Path .\TestModuleWithEdition.psd1 -CompatiblePSEditions Desktop,Core -PowerShellVersion 5.1 $moduleInfo = Test-ModuleManifest -Path \TestModuleWithEdition.psd1 $moduleInfo.CompatiblePSEditions Desktop Core $moduleInfo | Get-Member CompatiblePSEditions TypeName: System.Management.Automation.PSModuleInfo Name MemberType Definition ---- ---------- ---------- CompatiblePSEditions Property System.Collections.Generic.IEnumerable[string] CompatiblePSEditions {get;}

При получении списка доступных модулей можно отфильтровать его по выпуску PowerShell.When getting a list of available modules, you can filter the list by PowerShell edition.

Get-Module -ListAvailable | ? CompatiblePSEditions -Contains "Desktop" Directory: C:\Program Files\WindowsPowerShell\Modules ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 1.0 ModuleWithPSEditions Get-Module -ListAvailable | ? CompatiblePSEditions -Contains "Core" | % CompatiblePSEditions Desktop Core

Авторы сценариев могут запретить их выполнение, когда они запускаются в несовместимом выпуске PowerShell, с помощью параметра PSEdition инструкции #requires.Script authors can prevent a script from executing unless it is run on a compatible edition of PowerShell using the PSEdition parameter on a #requires statement.

Set-Content C:\script.ps1 -Value "#requires -PSEdition Core Get-Process -Name PowerShell" Get-Content C:\script.ps1 #requires -PSEdition Core Get-Process -Name PowerShell C:\script.ps1 C:\script.ps1 : The script 'script.ps1' cannot be run because it contained a "#requires" statement for PowerShell editions 'Core'. The edition of PowerShell that is required by the script does not match the currently running PowerShell Desktop edition. At line:1 char:1 + C:\script.ps1 + ~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (script.ps1:String) [], RuntimeException + FullyQualifiedErrorId : ScriptRequiresUnmatchedPSEdition

Установка сервера Nano ServerInstalling Nano Server

Краткие и подробные шаги по установке сервера Nano Server на виртуальных машинах или физических компьютерах приведены в разделе Установка сервера Nano Server, который является родительским по отношению к данному.Quick-start and detailed steps for installing Nano Server on virtual or physical machines are provided in Install Nano Server, which is the parent topic for this one.

Примечание

Для разработки на базе сервера Nano Server может оказаться полезным установить сервер Nano Server с использованием параметра -Development в New-NanoServerImage.For development work on Nano Server, you might find it useful to install Nano Server by using the -Development parameter of New-NanoServerImage. Это позволит устанавливать неподписанные драйверы, копировать двоичные файлы отладчика, открыть порт для отладки, включить тестовую подпись и установку пакетов AppX без лицензии разработчика.This will enable installation of unsigned drivers, copy debugger binaries, open a port for debugging, enable test signing and enable installation of AppX packages without a developer license. Например:For example:

New-NanoServerImage -DeploymentType Guest -Edition Standard -MediaPath \\Path\To\Media\en_us -BasePath .\Base -TargetPath .\NanoServer.wim -Development

Определение типа реализации командлетаDetermining the type of cmdlet implementation

PowerShell поддерживает несколько типов реализации для командлетов, которые определяют, какие средства и процедуры используются в процессе создания или переноса для работы на сервере Nano Server.PowerShell supports a number of implementation types for cmdlets, and the one you've used determines the process and tools involved in creating or porting it to work on Nano Server. Ниже приведены поддерживаемые типы реализации:Supported implementation types are:

  • CIM— состоит из файлов CDXML, наложенных на поставщиков CIM (WMI версии 2)CIM - consists of CDXML files layered over CIM (WMIv2) providers
  • .NET— состоит из сборок .NET, которые реализуют управляемые интерфейсы командлетов, обычно написанные на языке C#.NET - consists of .NET assemblies implementing managed cmdlet interfaces, typically written in C#
  • Сценарий PowerShell— состоит из модулей сценариев (psm1) или сценариев (ps1), написанных на языке PowerShellPowerShell Script - consists of script modules (.psm1) or scripts (.ps1) written in the PowerShell language

Если вы не знаете, какую реализацию вы использовали для существующих командлетов, которые требуется перенести, установите продукт или компонент и найдите папку модуля PowerShell в одном из следующих расположений:If you're not sure which implementation you've used for existing cmdlets you want to port, install your product or feature and then look for the PowerShell module folder in one of the following locations:

  • %windir%\system32\WindowsPowerShell\v1.0\Modules%windir%\system32\WindowsPowerShell\v1.0\Modules
  • %ProgramFiles%\WindowsPowerShell\Modules%ProgramFiles%\WindowsPowerShell\Modules
  • %UserProfile%\Documents\WindowsPowerShell\Modules%UserProfile%\Documents\WindowsPowerShell\Modules
  • <расположение установки продукта><your product installation location>

    Проверьте эти расположения на соответствие следующим условиям:Check in these locations for these details:

    • Командлеты CIM имеют расширения файла CDXML.CIM cmdlets have .cdxml file extensions.
    • Командлеты .NET имеют расширения файла DLL или сборки, установленные в глобальном кэше сборок, который указан в PSD1-файле в поле RootModule, ModuleToProcess или NestedModules..NET cmdlets have .dll file extensions, or have assemblies installed to the GAC listed in the .psd1 file under the RootModule, ModuleToProcess, or NestedModules fields.
  • Командлеты сценария PowerShell имеют расширения файлов PSM1 или PS1.PowerShell script cmdlets have .psm1 or .ps1 file extensions.

Перенос командлетов CIMPorting CIM cmdlets

В общем случае эти командлеты должны работать в Nano Server без обязательного преобразования.Generally, these cmdlets should work in Nano Server without any conversion necessary. Однако следует перенести базовый поставщик WMI версии 2 для запуска на сервере Nano Server, если это еще не было сделано.However, you must port the underlying WMI v2 provider to run on Nano Server if that has not already been done.

Создание кода C++ для Nano ServerBuilding C++ for Nano Server

Чтобы получить библиотеки DLL на языке C++, работающие на Nano Server, скомпилируйте их для Nano Server, а не для конкретного выпуска.To get C++ DLLs working on Nano Server, compile them for Nano Server rather than for a specific edition.

Необходимые условия и пошаговое руководство по разработке на C++ для Nano Server см. в статье Разработка собственных приложений на базе сервера Nano Server.For prerequisites and a walkthrough of developing C++ on Nano Server, see Developing Native Apps on Nano Server.

Перенос командлетов .NETPorting .NET cmdlets

На сервере Nano Server поддерживается большая часть кода C#.Most C# code is supported on Nano Server. Для поиска несовместимых API можно использовать ApiPort.You can use ApiPort to scan for incompatible APIs.

Пакет SDK для Powershell CorePowershell Core SDK

В коллекции PowerShell присутствует модуль "Microsoft.PowerShell.NanoServer.SDK", упрощающий разработку командлетов .NET с помощью Visual Studio2015 с обновлением 2, которые предназначены для версий CoreCLR и PowerShell Core, доступных в Nano Server.The module "Microsoft.PowerShell.NanoServer.SDK" is available in the PowerShell Gallery to facilitate developing .NET cmdlets using Visual Studio 2015 Update 2 that target the versions of CoreCLR and PowerShell Core available in Nano Server. Вы можете установить модуль, используя PowerShellGet со следующей командой:You can install the module using PowerShellGet with this command:

Find-Module Microsoft.PowerShell.NanoServer.SDK -Repository PSGallery | Install-Module -Scope <scope>

Модуль SDK для PowerShell Core предоставляет командлеты для настройки правильных ссылочных сборок CoreCLR и PowerShell Core, создания в Visual Studio2015 проекта на C#, предназначенного для этих ссылочных сборок, и настройки удаленного отладчика на компьютере Nano Server, чтобы разработчики могли удаленно выполнять отладку своих командлетов .NET на сервере Nano Server в Visual Studio2015.The PowerShell Core SDK module exposes cmdlets to set up the correct CoreCLR and PowerShell Core reference assemblies, create a C# project in Visual Studio 2015 targeting those reference assemblies, and set up the remote debugger on a Nano Server machine so that developers can debug their .NET cmdlets running on Nano Server remotely in Visual Studio 2015.

Модулю SDK для PowerShell Core требуется Visual Studio2015 с обновлением 2.The PowerShell Core SDK module requires Visual Studio 2015 Update 2. Если у вас не установлена среда Visual Studio2015, можно установить Visual Studio Community2015.If you do not have Visual Studio 2015 installed, you can install Visual Studio Community 2015.

Работа модуля SDK также зависит от наличия следующих компонентов в Visual Studio2015:The SDK module also depends on the following feature to be installed in Visual Studio 2015:

  • Разработка приложений для Windows и веб-приложений -> Средства разработки универсальных приложений Windows -> Средства (1.3.1) и Windows10 SDKWindows and Web Development -> Universal Windows App Development Tools -> Tools (1.3.1) and Windows 10 SDK

Проверьте установку Visual Studio перед использованием модуля SDK, чтобы убедиться в соблюдении этих условий.Review your Visual Studio installation before using the SDK module to ensure these prerequisites are satisfied. Обязательно выберите установку указанного выше компонента во время установки Visual Studio или измените существующий экземпляр Visual Studio2015, чтобы установить этот компонент.Make sure you select to install the above feature during the Visual Studio installation, or modify your existing Visual Studio 2015 installation to install it.

Модуль SDK PowerShell Core включает в себя следующие командлеты:The PowerShell Core SDK module includes the following cmdlets:

  • New-NanoCSharpProject: создает новый проект C# Visual Studio, ориентированный на CoreCLR и PowerShell Core, входящие в выпуск Windows Server2016 для Nano Server.New-NanoCSharpProject: Creates a new Visual Studio C# project targeting CoreCLR and PowerShell Core included in the Windows Server 2016 release of Nano Server.
  • Show-SdkSetupReadMe: переходит в корневую папку SDK в проводнике и открывает файл README.txt для настройки вручную.Show-SdkSetupReadMe: Opens the SDK root folder in File Explorer and opens the README.txt file for manual setup.
  • Install-RemoteDebugger: устанавливает и настраивает удаленный отладчик Visual Studio на компьютере Nano Server.Install-RemoteDebugger: Installs and configures the Visual Studio remote debugger on a Nano Server machine.
  • Start-RemoteDebugger: запускает удаленный отладчик на удаленном компьютере под управлением Nano Server.Start-RemoteDebugger: Starts the remote debugger on a remote machine running Nano Server.
  • Stop-RemoteDebugger: останавливает удаленный отладчик на удаленном компьютере под управлением Nano Server.Stop-RemoteDebugger: Stops the remote debugger on a remote machine running Nano Server.

Чтобы получить подробные сведения об использовании этих командлетов, выполните команду Get-Help для каждого командлета после установки и импорта модуля следующим образом:For detailed information about how to use those cmdlets, run Get-Help on each cmdlet after installing and importing the module as follows:

Get-Command -Module Microsoft.PowerShell.NanoServer.SDK | Get-Help -Full

Поиск совместимых APISearching for compatible APIs

Вы можете выполнить поиск в каталоге API для .NET Core или дизассемблировать ссылочные сборки среды CLR Core.You can search in the API catalog for .NET Core or disassemble Core CLR reference assemblies. Дополнительные сведения о переносимости платформы для API .NET см. в статье Переносимость платформы.For more information about platform portability of .NET APIs, see Platform Portability

PInvokePInvoke

В среде CLR Core, используемой Nano Server, некоторые основополагающие библиотеки DLL, такие как kernel32.dll и advapi32.dll, были разделены на множество наборов API, поэтому вам потребуется убедиться, что вызовы PInvoke ссылаются на правильный API.In the Core CLR that Nano Server uses, some fundamental DLLs such as kernel32.dll and advapi32.dll were split into numerous API sets, so you'll need to ensure that your PInvokes reference the correct API. Любая несовместимость проявится как ошибка во время выполнения.Any incompatibility will manifest as a runtime error.

Список собственных API, поддерживаемых на сервере Nano Server, см. в статье API сервера Nano Server.For a list of native APIs supported on Nano Server, see Nano Server APIs.

Создание кода C# для Nano ServerBuilding C# for Nano Server

После создания в Visual Studio2015 проекта C# с помощью New-NanoCSharpProject можно легко собрать его, выбрав меню Сборка и Собрать проект или Собрать решение.Once a C# project is created in Visual Studio 2015 by using New-NanoCSharpProject, you can simply build it in Visual Studio by clicking the Build menu and selecting Build Project or Build Solution. Созданные сборки будут ориентированы на правильные CoreCLR и PowerShell Core, поставляемые вместе с Nano Server, и можно просто скопировать эти сборки на компьютер под управлением Nano Server и использовать их.The generated assemblies will be targeting the correct CoreCLR and PowerShell Core shipped in Nano Server, and you can just copy the assemblies to a computer running Nano Server and use them.

Создание управляемого кода C++ (CPP/CLI) для Nano ServerBuilding managed C++ (CPP/CLI) for Nano Server

Управляемый код C++ не поддерживается для CoreCLR.Managed C++ is not supported for CoreCLR. При переносе в CoreCLR перепишите управляемый код C++ в C# и выполните все собственные вызовы через PInvoke.When porting to CoreCLR, rewrite managed C++ code in C# and make all native calls through PInvoke.

Перенос командлетов сценариев PowerShellPorting PowerShell script cmdlets

PowerShell Core имеет полное языковое соответствие PowerShell с другими выпусками PowerShell, включая выпуск для Windows Server2016 и Windows10.PowerShell Core has full PowerShell language parity with other editions of PowerShell, including the edition running on Windows Server 2016 and Windows 10. Однако при переносе командлетов сценариев PowerShell на сервер Nano Server необходимо учитывать следующие факторы:However, when porting PowerShell script cmdlets to Nano Server, keep these factors in mind:

  • Существуют ли зависимости от других командлетов?Are there dependencies on other cmdlets? Если это так, доступны ли эти командлеты на сервере Nano Server?If so, are those cmdlets available on Nano Server. В статье PowerShell на сервере Nano Server приведены сведения о недоступных компонентах.See PowerShell on Nano Server for information about what is not available.
  • Если имеются зависимости от сборок, загружаемых во время выполнения, продолжат ли они работать?If you have dependencies on assemblies that are loaded at runtime, will they still work?
  • Как можно выполнить отладку сценария удаленно?How can you debug the script remotely?
  • Как можно выполнить миграцию из WMI .Net в MI .Net?How can you migrate from WMI .Net to MI .Net?

Зависимость от встроенных командлетовDependency on built-in cmdlets

Не все командлеты в Windows Server2016 доступны на сервере Nano Server (см. статью PowerShell на сервере Nano Server).Not all cmdlets in Windows Server 2016 are available on Nano Server (see PowerShell on Nano Server). Лучше всего настроить виртуальную машину с Nano Server и выяснить, доступны ли нужные командлеты.The best approach is to set up a Nano Server virtual machine and discover whether the cmdlets you need are available. Для этого запустите Enter-PSSession для подключения к целевому серверу Nano Server, а затем Get-Command -CommandType Cmdlet, Function для получения списка доступных командлетов.To do this, run Enter-PSSession to connect to the target Nano Server and then run Get-Command -CommandType Cmdlet, Function to get the list of available cmdlets.

Возможность использования классов PowerShellConsider using PowerShell classes

Add-Type поддерживается на сервере Nano Server для компиляции встроенного кода C#.Add-Type is supported on Nano Server for compiling inline C# code. Если вы пишете новый код или переносите существующий, можно использовать классы PowerShell для определения пользовательских типов.If you're writing new code or porting existing code, you might also consider using PowerShell classes to define custom types. Вы можете использовать классы PowerShell для сценариев контейнера свойств, а также для перечислений.You can use PowerShell classes for property bag scenarios as well as for Enums. Если необходимо выполнить PInvoke, сделайте это через C# с помощью Add-Type или в предварительно скомпилированной сборке.If you need to do a PInvoke, do this via C# using Add-Type or in a pre-compiled assembly.Ниже приведен пример использования Add-Type:Here's a sample showing the use of Add-Type:

Add-Type -ReferencedAssemblies ([Microsoft.Management.Infrastructure.Ciminstance].Assembly.Location) -TypeDefinition @' public class TestNetConnectionResult { // The compute name public string ComputerName = null; // The Remote IP address used for connectivity public System.Net.IPAddress RemoteAddress = null; } '@ # Create object and set properties $result = New-Object TestNetConnectionResult $result.ComputerName = "Foo" $result.RemoteAddress = 1.1.1.1

В этом примере показано использование классов PowerShell на сервере Nano Server:This sample shows using PowerShell classes on Nano Server:

class TestNetConnectionResult { # The compute name [string] $ComputerName #The Remote IP address used for connectivity [System.Net.IPAddress] $RemoteAddress } # Create object and set properties $result = [TestNetConnectionResult]::new() $result.ComputerName = "Foo" $result.RemoteAddress = 1.1.1.1

Удаленная отладка сценариевRemotely debugging scripts

Для удаленной отладки сценария подключитесь к удаленному компьютеру, воспользовавшись Enter-PSsession из интегрированной среды сценариев PowerShell.To remotely debug a script, connect to the remote computer using Enter-PSsession from the PowerShell ISE. Внутри сеанса можно запустить psedit <file_path>, после чего копия файла открывается в локальной интегрированной среде сценариев PowerShell.Once inside the session, you can run psedit <file_path> and a copy of the file will be open in your local PowerShell ISE. Затем можно отлаживать скрипт, как если бы он выполнялся локально, задавая точки останова.Then, you can debug the script as if it were running locally by setting breakpoints. Кроме того, любые изменения, внесенные в этот файл, сохраняются в удаленной версии.Also, any changes you make to this file will be saved in the remote version.

Переход с WMI .NET на MI .NETMigrating from WMI .NET to MI .NET

WMI .NET не поддерживается, поэтому все командлеты, использующие старый API, необходимо перенести на поддерживаемый API WMI: MI. NET.WMI .NET is not supported, so all cmdlets using the old API must migrate to the supported WMI API: MI. NET. Доступ к MI .NET осуществляется напрямую из C# или с помощью командлетов в модуле CimCmdlets.You can access MI .NET directly through C# or through the cmdlets in the CimCmdlets module.

Модуль CimCmdletsCimCmdlets module

Командлеты WMI версии 1 (например, Get-WmiObject) не поддерживаются на сервере Nano Server.The WMI v1 cmdlets (e.g., Get-WmiObject) are not supported on Nano Server. Однако поддерживаются командлеты CIM (например, Get-CimInstance) в модуле CimCmdlets.However, the CIM cmdlets (e.g., Get-CimInstance) in the CimCmdlets module are supported. Командлеты CIM очень близко соответствуют командлетам WMI версии 1.The CIM cmdlets map pretty closely to the WMI v1 cmdlets. Например, Get-WmiObject похож на Get-CimInstance, так как использует схожие параметры.For example, Get-WmiObject correlates with Get-CimInstance using very similar parameters. Синтаксис вызова метода немного отличается, но хорошо документирован посредством Invoke-CimMethod.Method invocation syntax is slightly different, but is well documented via Invoke-CimMethod. Будьте внимательны при вводе параметров.Be careful regarding parameter typing. MI .NET предъявляет более строгие требования в отношении типов параметров метода.MI .NET has stricter requirements regarding method parameter types.

API C#C# API

WMI .NET упаковывает интерфейс WMI версии 1, хотя MI .NET упаковывает интерфейс WMI версии 2 (CIM).WMI .NET wraps the WMIv1 interface, while MI .NET wraps the WMIv2 (CIM) interface. Предоставляемые классы могут отличаться, но базовые операции очень похожи.The classes exposed might be different, but the underlying operations are very similar. Вы перечисляете или возвращаете экземпляры объектов и вызываете операции для них, чтобы выполнить поставленные задачи.You enumerate or get instances of objects and invoke operations on them to accomplish tasks.

docs.microsoft.com

Как загрузить командлеты PowerShell и получить справку по командлетам

  • 11/17/2015
  • Время чтения: 2 мин

В этой статье

Назначение: Application Virtualization 5.0, Application Virtualization 5.0 SP1, Application Virtualization 5.0 SP2, Application Virtualization 5.0 SP3

Содержание этого раздела:

  • Требования к использованию командлетов PowerShell

  • Загрузите командлеты PowerShell

  • Получение справки по командлетам PowerShell

  • Отображение справки по командлету PowerShell

Требования к использованию командлетов PowerShell

Ознакомьтесь со следующими требованиями к использованию командлетов PowerShell App-V.

Требование Сведения

Пользователи могут запускать командлеты сервера App-V только в том случае, если им предоставлен доступ с помощью одного из следующих методов:

Командлеты, которые требуют командную строку с повышенными привилегиями

  • Add-AppvClientPackage
  • Remove-AppvClientPackage
  • Set-AppvClientConfiguration
  • Add-AppvClientConnectionGroup
  • Remove-AppvClientConnectionGroup
  • Add-AppvPublishingServer
  • Remove-AppvPublishingServer
  • Send-AppvClientReport
  • Set-AppvClientMode
  • Set-AppvClientPackage
  • Set-AppvPublishingServer

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

  • Publish-AppvClientPackage
  • Unpublish-AppvClientPackage

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

 

Загрузите командлеты PowerShell

Для загрузки модулей командлетов PowerShell:

  1. Откройте Windows PowerShell или интегрированную среду сценариев Windows PowerShell (ISE).

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

Компонент App-V Команда для ввода

Сервер App-V

Import-Module AppvServer

App-V Sequencer

Import-Module AppvSequencer

Клиент App-V

Import-Module AppvClient

Получение справки по командлетам PowerShell

Начиная с версии App-V 5.0 SP3 справка по командлетам доступна в двух форматах.

Формат Описание

Как загружаемый модуль

Чтобы загрузить последнюю версию справки после загрузки модуля командлета:

  1. Откройте Windows PowerShell или интегрированную среду сценариев Windows PowerShell (ISE).
  2. Введите одну из следующих команд, чтобы загрузить командлеты для желаемого модуля:

 

Компонент App-V Команда для ввода

Сервер App-V

Update-Help-Module AppvServer

App-V Sequencer

Update-Help-Module AppvSequencer

Клиент App-V

Update-Help-Module AppvClient

В библиотеке TechNet в виде веб-страниц

См. узел App-V в разделе Microsoft Desktop Optimization Pack Automation с Windows PowerShell.

Отображение справки по командлету PowerShell

Для получения справки по определенному командлету PowerShell:

  1. Откройте Windows PowerShell или интегрированную среду сценариев Windows PowerShell (ISE).

  2. Введите Get-Help <командлет>, например Get-Help Publish-AppvClientPackage.

Есть предложение для App-V? Выдвигайте предложения и голосуйте за них здесь.Есть вопрос по App-V? Найдите ответ на форуме TechNet по App-V.

-----Дополнительные сведения о MDOP можно найти в библиотеке TechNet, статьях по устранению неполадок на вики-сайте TechNet или подписавшись на новости в Facebook или Twitter.-----

technet.microsoft.com

1.4. Типы команд PowerShell

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

Первый тип – так называемые командлеты (cmdlet). Этот термин используется пока только внутри PowerShell. Командлет – аналог внутренней команды интерпретатора командной строки - представляет собой класс .NET, порожденный от базового класса Cmdlet; разрабатываются командлеты с помощью пакета PowerShell Software Developers Kit (SDK). Единый базовый класс Cmdlet гарантирует совместимый синтаксис всех командлетов, а также автоматизирует анализ параметров командной строки и описание синтаксиса командлетов для встроенной справки. Командлеты рассматриваются в данной работе. С командами других типов можно ознакомиться, используя [1].

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

Следующий тип команд – функции. Функция – это блок кода на языке PowerShell, имеющий название и находящийся в памяти до завершения текущего сеанса командной оболочки. Функции, как и командлеты, поддерживают именованные параметры. Анализ синтаксиса функции производится один раз при ее объявлении.

Сценарий – это блок кода на языке PowerShell, хранящийся во внешнем файле с расширением ps1. Анализ синтаксиса сценария производится при каждом его запуске.

Последний тип команд – внешние исполняемые файлы, которые выполняются обычным образом операционной системой.

1.5. Имена и синтаксис командлетов

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

Команды Windows PowerShell следуют определенным правилам именования:

  • Команды Windows PowerShell состоят из глагола и существительного (всегда в единственном числе), разделенных тире. Глагол задает определенное действие, а существительное определяет объект, над которым это действие будет совершено. Команды записываются на английском языке. Пример: Get-Help вызывает интерактивную справку по синтаксису Windows PowerShell.

  • Перед параметрами ставится символ «-». Например: Get-Help –Detailed.

  • В Windows PowerShell также включены псевдонимы многих известных команд. Это упрощает знакомство и использование Windows PowerShell. Пример: команды help (классический стиль Windows) и man (классический стиль Unix) работают так же, как и Get-Help.

Например, Get-Process (получить информацию о процессе), Stop-Service (остановить службу), Clear-Host (очистить экран консоли) и т.д. Чтобы просмотреть список командлетов, доступных в ходе текущего сеанса, нужно выполнить командлет Get-Command.

По умолчанию командлет Get-Command выводит сведения в трех столбцах: CommandType, Name и Definition. При этом в столбце Definition отображается синтаксис командлетов (многоточие (…) в столбце синтаксиса указывает на то, что данные обрезаны).

Замечание. Косые черты (/ и \) вместе с параметрами в оболочке Windows PowerShell не используются.

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

имя_командлета –параметр1 -параметр2 аргумент1 аргумент2

Здесь параметр1 – параметр (переключатель), не имеющий значения; параметр2 – имя параметра, имеющего значение аргумент1; аргумент2 – параметр, не имеющий имени. Например, командлет Get-Process имеет параметр Name, который определяет имя процесса, информацию о котором нужно вывести. Имя этого параметра указывать необязательно. Таким образом, для получения сведений о процессе Far можно ввести либо команду Get-Process -Name Far, либо команду Get-Process Far.

studfiles.net

1.4. Типы команд PowerShell

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

Первый тип – так называемые командлеты (cmdlet). Этот термин используется пока только внутри PowerShell. Командлет – аналог внутренней команды интерпретатора командной строки - представляет собой класс .NET, порожденный от базового класса Cmdlet; разрабатываются командлеты с помощью пакета PowerShell Software Developers Kit (SDK). Единый базовый класс Cmdlet гарантирует совместимый синтаксис всех командлетов, а также автоматизирует анализ параметров командной строки и описание синтаксиса командлетов для встроенной справки. Командлеты рассматриваются в данной работе. С командами других типов можно ознакомиться, используя [1].

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

Следующий тип команд – функции. Функция – это блок кода на языке PowerShell, имеющий название и находящийся в памяти до завершения текущего сеанса командной оболочки. Функции, как и командлеты, поддерживают именованные параметры. Анализ синтаксиса функции производится один раз при ее объявлении.

Сценарий – это блок кода на языке PowerShell, хранящийся во внешнем файле с расширением ps1. Анализ синтаксиса сценария производится при каждом его запуске.

Последний тип команд – внешние исполняемые файлы, которые выполняются обычным образом операционной системой.

1.5. Имена и синтаксис командлетов

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

Команды Windows PowerShell следуют определенным правилам именования:

  • Команды Windows PowerShell состоят из глагола и существительного (всегда в единственном числе), разделенных тире. Глагол задает определенное действие, а существительное определяет объект, над которым это действие будет совершено. Команды записываются на английском языке. Пример: Get-Help вызывает интерактивную справку по синтаксису Windows PowerShell.

  • Перед параметрами ставится символ «-». Например: Get-Help –Detailed.

  • В Windows PowerShell также включены псевдонимы многих известных команд. Это упрощает знакомство и использование Windows PowerShell. Пример: команды help (классический стиль Windows) и man (классический стиль Unix) работают так же, как и Get-Help.

Например, Get-Process (получить информацию о процессе), Stop-Service (остановить службу), Clear-Host (очистить экран консоли) и т.д. Чтобы просмотреть список командлетов, доступных в ходе текущего сеанса, нужно выполнить командлет Get-Command.

По умолчанию командлет Get-Command выводит сведения в трех столбцах: CommandType, Name и Definition. При этом в столбце Definition отображается синтаксис командлетов (многоточие (…) в столбце синтаксиса указывает на то, что данные обрезаны).

Замечание. Косые черты (/ и \) вместе с параметрами в оболочке Windows PowerShell не используются.

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

имя_командлета –параметр1 -параметр2 аргумент1 аргумент2

Здесь параметр1 – параметр (переключатель), не имеющий значения; параметр2 – имя параметра, имеющего значение аргумент1; аргумент2 – параметр, не имеющий имени. Например, командлет Get-Process имеет параметр Name, который определяет имя процесса, информацию о котором нужно вывести. Имя этого параметра указывать необязательно. Таким образом, для получения сведений о процессе Far можно ввести либо команду Get-Process -Name Far, либо команду Get-Process Far.

studfiles.net

Windows PowerShell 2.0

 

  , .

Windows 7 (x64) Ultimate

PowerShell

Get-Variable

, a, b c

a New-Variable a.

b New-Variable b -Value 34 (    -Value 34 34)

, 28 , New-Variable -Value 28 -Option readonly

-Option readonly

Get-Variable

, a, b c  , a , b 34 28

a 62 Set-Variable -Name a -Value 62

Get-Variable

, 62

b c 34 0 Set-Variable -Name b -Value 0

Get-Variable

b 34 0

c 28 100 Set-Variable -Name c -Value 100

Set-Variable -Name c -Value 100 ,

, c, Set-Variable -Name c -Value 100 -Force

Get-Variable

c 100

a Remove-Variable a

Get-Variable

, a

c, Remove-Variable c.

Remove-Variable c Force, Remove-Variable c -Force

Get-Variable

, c

b, 0

, Clear-Variable -Name b

Get-Variable

, b

remontcompa.ru