С изменением CoreCLR 2.0, которое соответствует .Net Std 2.0, а также с обновлением, позволяющим выполнять поиск сборок в GAC, нам нужна проверка того, что PSCore6 является жизнеспособной заменой Windows PowerShell 5.x. Перечислите здесь модули, которые вы пробовали, но которые не работают. Голосуйте 👍 за те модули, которые вам больше всего нравятся, чтобы помочь нам определить приоритеты работы с партнерами, чтобы обеспечить поддержку или их перенос на .Net Std 2.0.
Пока https://github.com/PowerShell/PowerShell/issues/4056 не будет разрешен, вам необходимо вручную добавить Windows PowerShell PSModulePath для обнаружения этих модулей:
PS > $env:psmodulepath += ";${env:userprofile}\Documents\WindowsPowerShell\Modules;${env:programfiles}\WindowsPowerShell\Modules;${env:windir}\system32\WindowsPowerShell\v1.0\Modules\"
PSSnapins:
Ошибка из-за Add-Type
Базовые тесты работают:
Необходимо портировать:
Не уверен:
Мы не планируем поддерживать рабочий процесс. Вместо этого мы стремимся улучшить параллелизм / параллельное выполнение в сценарии PowerShell, что, по нашему мнению, является основной причиной, по которой люди используют рабочие процессы. Если есть другие причины, дайте мне знать.
ConvertFrom-String опирается на технологию Microsoft Research, которую в настоящее время не планируется использовать с открытым исходным кодом.
Однако я ценю отзывы.
Workflow и ConvertFrom-String независимы по разным причинам, по которым их не планируется включать в PSCore6. Я согласен с тем, что ConvertFrom-String отлично подойдет для существующих текстовых нативных утилит в Linux. Возможно, мы сможем создать новый командлет с аналогичными, но более простыми возможностями, как ConvertFrom-String.
ConvertFrom-string или аналогичные функции были бы чрезвычайно полезны
Я проверил загрузку модуля Windows PowerShell в Windows 10 версии 16215 с установленным RSAT.
Скрипт и результаты (включая ошибки) в прикрепленном файле.
4062a.txt
4062b.txt - полный список модулей из PowerShell Core.
Суммируя.
Всего основных модулей = 12.
Всего модулей Windows и Core = 120.
Всего модулей Windows = 108 (в Windows Powershell Get-Module -ListAvailable) .count = 109)
После запуска PowerShell Core - загружается 3 модуля.
После попытки загрузить все модули - загружается 71 модуль.
Итак, загружено 59 из 108 модулей Windows.
$ error.count = 79
@iSazonov благодарит за такие результаты.
cc @ PowerShell / комитет по PowerShell
О, модуль ActiveDirectory - это PSSnapIn 😕 Основные потребители PowerShell Core (системные администраторы) выброшены за борт!
Нам придется поговорить с этой командой о переписывании их командлета ...
Exchange Server 2013 EMS раздавил PowerShell Core. Также он не может найти сборки Exchange.
Модуль SCCM 2012 R2 не загружен - нарушены зависимости .Net и не найдены сборки в локальной (домашней) папке SCCM.
Модуль Sharepoint 2013 - это PSSnapIn.
В MacOS и Linux:
Install-Module Docker -Scope CurrentUser -Repository DockerPS-Dev
Get-Container
Не удалось загрузить файл или сборку «Docker.DotNet, версия = 2.124.0.0, культура = нейтральная, PublicKeyToken = null». Система не может найти указанный файл.
В строке: 1 символ: 1
Итак, правильно ли я делаю вывод из комментариев выше, что ActiveDirectory не работает, потому что это PSSnapIn, а не модуль, и эта версия не поддерживает оснастки?
Кроме того, хотя я мог импортировать-Module -Name MSOnline, когда я попробовал Connect-MsolService, я получил сообщение «Не удалось загрузить тип System.Drawing.Drawing2D.InterpolationMode» из сборки System.Drawing, после чего произошел сбой powershell.exe.
@JakeMoe Да, PSSnapIn не рекомендуется в PowerShell Core.
System.Drawing
отсутствует в CoreFS и .Net Standard 2.0.
@iSazonov, не могли бы вы
И спасибо всем остальным, продолжайте!
PS C: \ Program Files \ PowerShell \ 6.0.0-beta.4> Импорт-модуль MSOnline
Модуль импорта: не удалось загрузить тип System.Diagnostics.EventLogEntryType из сборки System, Version = 4.0.0.0,
Культура = нейтральный, PublicKeyToken = b77a5c561934e089 '.
PS > Start-Process powershell -Credential (Get-Credential)
Windows PowerShell credential request
Enter your credentials.
User: domain\username
Password for user domain\username: **************
Start-Process : Unable to load DLL 'api-ms-win-security-cpwl-l1-1-0.dll': The specified module could not be found.
(Exception from HRESULT: 0x8007007E)
At line:1 char:1
+ Start-Process powershell -Credential (Get-Credential)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Start-Process], DllNotFoundException
+ FullyQualifiedErrorId : System.DllNotFoundException,Microsoft.PowerShell.Commands.StartProcessCommand
@joeyaiello
at System.Management.MTAHelper.IsNoContextMTA()
at System.Management.MTAHelper.CreateInMTA(Type type)
...
Я снова проверил загрузку модуля Windows PowerShell в Windows 10 версии 162241 с установленным RSAT.
Скрипт и результаты (включая ошибки) в прикрепленном файле.
4062Beta4fulllist.txt
4062Beta4ipmoall.txt - полный список модулей из PowerShell Core.
Суммируя.
Всего основных модулей = 12.
Всего модулей Windows и Core = 125.
Всего модулей Windows = 113.
После запуска PowerShell Core - загружается 2 модуля.
После попытки загрузить все модули - загружается 108 модулей.
Так загружено 96 из 113 модулей винды.
$ error.count = 47
проверил один из моих пользовательских скриптов с Beta 4, но он прерывается с ошибкой:
catch: function : Процесс: Ошибка: исключение, вызывающее «.ctor» с аргументом (ами) «0»: « Не удалось загрузить тип 'System.Diagnostics.PerformanceCounter ' из сборки 'System, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089 '. "
открыт # 4295
Отредактировал @ daxian-dbw:
Основная причина в том, что System.Diagnostics.PerformanceCounter
в настоящее время недоступен в .NET Core
. dotnet / corefx # 3906 отслеживает поддержку PerformanceCounter
в .NET Core
но отмечен этапом «Будущее», что означает, что он не будет доступен в .NET Core 2.0
.
Пожалуйста, смотрите # 4295 для получения дополнительной информации.
@ mi-hol Пожалуйста, откройте новую проблему-вопрос.
Не удается заставить Get-WUList работать в версии 6.0 core beta-4 из PSWindowsUpdate версии 1.6.0.3 . Он отлично работает с Windows 10 Desktop PowerShell.
Выход:
Get-WUList -MicrosoftUpdate
Test-Connection : The client cannot connect to the destination specified in the request. Verify
that the service on the destination is running and is accepting requests. Consult the logs and
documentation for the WS-Management service running on the destination, most commonly IIS or
WinRM. If the destination is the WinRM service, run the following command on the destination to
analyze and configure the WinRM service: "winrm quickconfig".
At C:\Program Files\WindowsPowerShell\Modules\PSWindowsUpdate\1.6.0.3\Get-WUList.ps1:274 char:7
+ If(Test-Connection -ComputerName $Computer -Quiet)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Test-Connection], CimException
+ FullyQualifiedErrorId : TestConnectionException,Microsoft.PowerShell.Commands.TestConnection
Command
$PSVersionTable
Name Value
---- -----
PSVersion 6.0.0-beta
PSEdition Core
GitCommitId v6.0.0-beta.4
OS Microsoft Windows 10.0.15063
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
@fdncred Спасибо за ваш отчет!
Я тестировал PSWindowsUpdate.
И WebAdministration, и IISAdministration не работают в PS Core, поскольку они ожидают, что сборки GAC будут доступны. Использование DSC, вероятно, является лучшей альтернативой, но применение конфигурации в ядре неудобно из-за отсутствия Invoke-DSCResource
и Start-DSCConfiguration
. см. # 4457.
Любое обновление по проблеме, Невозможно импортировать модуль MsOnline в ОС на базе Linux . # 4269
Invoke-MySqlQuery из галереи PowerShell не работает. Я получаю сообщение об ошибке, когда пытаюсь использовать его в Beta 5 в Windows 10. Насколько я понимаю, стандарт .Net заключался в том, что есть шанс, что он должен работать в Windows (конечно, не в Linux / Mac). Сборка загружается, просто выдается ошибка одного из наиболее распространенных в ней методов.
https://www.powershellgallery.com/packages/Invoke-MySqlQuery/1.0.0/DisplayScript
Install-Script -Name Invoke-MySqlQuery
. Invoke-MySqlQuery.ps1
$MyCred = Get-Credential
Invoke-MySQLQuery -ComputerName MyServer -Database mysql -Query "select @@hostname" -Credential $MyCred
Exception calling "Open" with "0" argument(s): "The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception."
У меня также есть внутренний модуль, у которого такая же проблема с Conn.Open (). Мы используем внутренний модуль для подключения к сотням серверов MySql, а также к AWS Aurora.
Это происходит как с Connector / Net 6.9.9, так и с Connector / Net 8.0.8 (установленными на разных компьютерах). Он без проблем работает в предыдущих версиях PowerShell.
@FireInWinter Спасибо за ваш отчет! Пожалуйста, откройте новую проблему с инструкциями по воспроизведению проблемы.
Нам нужно уметь представлять формы. В идеале через System.Drawing, но при необходимости я мог бы преобразовать некоторые в XAML. Однако ни одна из них не работает, так что что-нибудь графическое с Powershell мертв? Мы никогда не перейдем к PowershellCore, если не сможем использовать какую-либо форму. И нет, мы не будем использовать C #: P
Кроме того, можно ли сказать, что Get-WmiObject мертв? Я бы хотел, чтобы синтаксис между Get-WmiObject и Get-CimInstance был идентичным, но это не так, поэтому вам придется кодировать дважды, если у вас все еще есть PS 2.0.
@agressiv, у нас есть некоторые исследования https://github.com/PowerShell/PowerShell/issues/3957, чтобы включить графические интерфейсы
Get-WmiObject
считается устаревшим. @joeyaiello только что опубликовал блог о том, что мы официально отказываемся от поддержки PSv2 . В течение некоторого времени мы рекомендовали перейти на командлеты CIM вместо использования командлетов WMI, которые могут взаимодействовать с реализациями CIM, отличными от Windows, через WSMan (OpenPegasus, OMI, Dell iDrac, HP iLO и т. Д.).
У нас все еще есть машины на версии 2.0, потому что Microsoft медленно поддерживала WMF 4.0 во многих основных продуктах, и наша миграция завершена. Нам придется сделать еще один проход, чтобы увидеть, кто остался, поскольку теперь нас просят развернуть 5.1 (что, конечно, несовместимо практически со всем, включая Skype и серверы Exchange).
Есть ли список командлетов, таких как Get-WmiObject, которые будут удалены, на которые мы можем ссылаться?
Какая целевая платформа для WinPE? Будет ли он перенесен в ядро? Мы также используем Windows Forms.
Я сделал дамп всех командлетов в бета-версии 6.0 и просто сделал объект сравнения. вот они для нас:
@agressiv VMware PowerCLI теперь является модулем, который можно установить из галереи PowerShell, и я почти уверен, что они уже поддерживают PowerShell Core с его помощью (хотя мне нужно это перепроверить). Однако, как вы отметили, есть и другие отставшие от PSSnapin.
@agressiv для PSCore6, мы намеренно удалили поддержку PSSnapins. Однако у VMWare есть порт PowerCLI для PSCore6 , которого в настоящее время нет в PSGallery.
@aggresiv : Что https://github.com/PowerShell/Phosphor , вы сможете проверить эксперимент, который мы проводим, чтобы попытаться создать веб-интерфейсы (которые позволяют избежать многих проблем, связанных с несопоставимыми «родными» интерфейсами. frameworks, хотя, если кто-то захочет сделать некоторые привязки Qt для PowerShell, это тоже меня очень обрадует).
Что касается Get-WmiObject
: вы правы, мы не планируем возвращать его. На мой взгляд, Get-CimInstance
улучшил синтаксис, поскольку Get-WmiObject
(отчасти причина, по которой это было сделано в первую очередь), и хотя я понимаю боль двойного кодирования, мы также просто устаревшая Windows PowerShell 2.0 , поэтому мы не собираемся проводить оптимизацию для обратной совместимости с 2.0 в будущем. : \
Мои варианты использования:
Если вы сможете заставить все они и их командлеты работать под Windows, Linux и MacOS, вас будут провозглашать героями.
Я считаю, что модуль AD является самым сложным, поскольку в настоящее время он является частью RSAT и оснасткой, как объяснялось в предыдущих комментариях. Но эй, команда AD должна идти в ногу со временем!
Если все остальное не помогает, то удаленный сеанс PowerShell с контроллером домена или другим компьютером Windows, на котором есть эти модули, а затем импорт сеанса.
@ KeeperB5 неявное удаленное взаимодействие путем импорта
Модуль импорта AzureAD
Подключить-AzureAD
Необработанное исключение: System.TypeLoadException: не удалось загрузить тип «System.Drawing.Icon» из сборки «System.Drawing, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a».
в System.Windows.Forms.Form.Dispose (логическое удаление)
в System.ComponentModel.Component.Finalize ()
connect-azuread: произошла одна или несколько ошибок. (Не удалось загрузить тип System.Drawing.Drawing2D.InterpolationMode из сборки System.Drawing, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a.): Не удалось загрузить тип S
ystem.Drawing.Drawing2D.InterpolationMode 'из сборки' System.Drawing, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a '.
В строке: 1 символ: 1
подключить лазурный
CategoryInfo: AuthenticationError: (:) [Connect-AzureAD], AadAuthenticationFailedException
FullyQualifiedErrorId: Connect-AzureAD, Microsoft.Open.Azure.AD.CommonLibrary.ConnectAzureAD
Кроме того, все приложение вылетает с сообщением «powershell.exe перестал работать»
Перенос этого этапа из 6.0.0, поскольку для 6.0.0 дополнительных работ не запланировано
@ SteveL-MSFT Не могли бы вы уточнить, возможно ли - каковы планы / сроки MSFT по внедрению модулей своих продуктов для PowerShell Core 6.0?
Многие продуктовые группы не начнут работу по валидации, пока мы не дойдем до финальной версии 6.0.0, поэтому основное внимание уделяется ее выполнению и взаимодействию с продуктовыми группами для начала валидации. К сожалению, это произойдет не быстро, поэтому в настоящее время я не могу предоставить график.
Исходя из этой проблемы , есть ли план переноса модулей Active Directory / Exchange на PowerShell v6? Будут ли инструменты работать только в Windows (поскольку System.DirectoryServices.Protocols в настоящее время работает только в Windows)?
@ j3vans CoreFX все еще имеет очень ограниченный API, и я не ожидаю, что команды MSFT
Install-Module SqlServer не устанавливается на Mac.
`` Шаги по воспроизводству:
Установить модуль SqlServer
Errors out with:
PackageManagement\Install-Package : Unable to load DLL 'api-ms-win-core-sysinfo-l1-1-0.dll': The specified module or one of its dependencies could not be found. (Exception from HRESULT: 0x8007007E) At /usr/local/microsoft/powershell/6.0.0-rc.2/Modules/PowerShellGet/1.6.0/PSModule.psm1:2057 char:21 + ... $null = PackageManagement\Install-Package <strong i="8">@PSBoundParameters</strong> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Exception
+ FullyQualifiedErrorId : System.DllNotFoundException,Microsoft.PowerShell.Commands.TestModuleManifestCommand,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
```powershell
> $PSVersionTable
Name Value
---- -----
PSVersion 6.0.0-rc.2
PSEdition Core
GitCommitId v6.0.0-rc.2
OS Darwin 16.7.0 Darwin Kernel Version 16.7.0: Wed Oct 4 00:17:00 PDT 2017; root:xnu-3789.71.6~1/RELEASE_X86_64
Platform Unix
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
О "Install-Module SQLServer" - Этот модуль предназначен только для системы Windows. Нет ни Linux / Mac SQLPS, ни модулей SQLServer (пока).
Теперь, если вы хотите попробовать создать свои собственные команды PowerShell для SQL Server в системах, отличных от Windows, вы можете установить «Microsoft.SqlServer.SqlManagementObjects», который будет работать в Linux.
Дополнительную информацию см. В моем сообщении в блоге: http://www.maxtblog.com/2017/11/streamlining-sql-server-management-objects-smo-in-powershell-core/
эта проблема будет решена https://github.com/PowerShell/WindowsPowerShellCompatibilityPack, пожалуйста, открывайте проблемы для конкретных модулей там
Ведется ли работа по созданию функционального модуля Active Directory для PS 6?
Привет @apetitjean!
Вы можете задать вопрос по ссылке @ SteveL-MSFT выше. Таким образом, его можно будет правильно отследить.
:)
До встречи на Саммите MVP!
Спасибо @MaximoTrinidad. Размещение здесь было именно моим намерением. Надеюсь, @ SteveL-MSFT увидит здесь мой вопрос.
Действительно до скорой встречи! :)
@apetitjean план состоит в том, чтобы иметь возможность поддерживать модуль Active Directory через пакет совместимости Windows PowerShell. Скорее всего, мы будем использовать неявное удаленное взаимодействие и, возможно, с JEA.
@ SteveL-MSFT Пакет совместимости Windows PowerShell будет только для Windows, верно? Я не думаю, что модуль Active Directory может работать только в Windows. Если планируется временная поддержка поддержки AD только в Windows до тех пор, пока требуемые API .NET Core не будут созданы x-plat, то я с этим согласен. Но AD используется не только для сред Windows, и возможность создания автоматизации в Linux (и macOS) с помощью PowerShell не должна требовать прямых манипуляций с .NET или вызова других языков оболочки / сценариев, которые могут поддерживать AD в Linux.
Насколько я понимаю, модуль Active Directory отсутствует в PowerShell.
Табличка команды и ее нужно полностью переписать для работы с PowerShell
Основной.
Я думаю, что Стив говорит об обходном пути, который должен работать до тех пор, пока
следующий выпуск модуля AD.
Текущий модуль AD имеет требования PSSnapin, которые в любом случае не будут работать в PS Core, если только мы не добавим прокладку PSSnapin в пакет совместимости Windows PowerShell, о котором я не знаю ... единственный способ для модуля AD - это переписать. Вот почему я обеспокоен тем, что @ SteveL-MSFT сказал, что модуль AD (хотя это ответственность команды ОС, а не команды PowerShell) будет поддерживаться пакетом совместимости Windows PowerShell. Уже возникла острая необходимость в рефакторинге модуля для ядра, и если его будущее связано с пакетом обеспечения совместимости Windows PowerShell, то это неправильное направление.
Я придерживаюсь мнения
Но это мое мнение!
:)
Насколько я понимаю, пакет совместимости с Windows PowerShell состоит в том, что он содержит все, что никогда не будет перенесено.
Пакет обеспечения совместимости Windows PowerShell предназначен для того, чтобы временно помочь существующим пользователям Windows PowerShell перейти на PSCore6. Долгосрочный план состоит в том, чтобы модули изначально работали на PSCore6, а также были кроссплатформенными. Некоторые команды могут решить, что они никогда не будут портировать на PSCore6 или будут, но не будут вкладывать средства в обеспечение кросс-платформенной совместимости. Самый большой фактор, способный помочь им принять _ правильное_ решение, - это отзывы клиентов (а не команда PowerShell, в которой мы представляем клиентов).
Понял. и для всех, кто чувствует то же, что и я:
а также
Если у меня есть сценарии, зависящие от dll-библиотек .Net framework, я должен поискать базовую версию этих зависимостей .Net через nuget, а затем попытаться перенести сценарий на PS6? Для этих зависимостей нет "обертки", верно?
@ dudeNumber4 это зависит от
@ dudeNumber4 это зависит от
Хорошо, только что попытался New-Object System.Data.OleDb.OleDbConnection
. _Не удается найти тип_. На nuget я вижу какой-то порт, заявляющий о поддержке .Net Standard 2.0. Чтобы перенести скрипт, мне нужно было бы добавить восстановление этой библиотеки с помощью nuget, верно?
@ dudeNumber4 мы не включаем эту сборку как часть самого PSCore6, поэтому для ее использования вы должны иметь возможность использовать Install-Package
для загрузки этого nupkg во время выполнения или делать это вручную и просто включать эту сборку в свой сценарий.
Веб-администрирование - заменяет ли xWebAdministration или будет перенесено веб-администрирование?
@IanKemp, этот модуль принадлежит команде IIS, поэтому я не знаю их планов. Однако в прошлый раз, когда моя команда посмотрела на этот модуль, некоторые из необходимых пространств имен .Net Framework были недоступны в .Net Core, поэтому до тех пор, пока это не произойдет, он не будет работать, если они не перепишут его.
Самый полезный комментарий
Нам придется поговорить с этой командой о переписывании их командлета ...