Помимо поиска $PSVersionTable
и дампа переменной и окружения «PS-Drives», что я могу сделать для сравнения сред PowerShell?
Вот в чем проблема:
- У меня очень похожие машины под управлением Microsoft Windows Server 2012.
$PSVersionTable
свалки как:Name Value ---- ----- PSVersion 4.0 WSManStackVersion 3.0 SerializationVersion 1.1.0.1 CLRVersion 4.0.30319.34014 BuildVersion 6.3.9600.17090 PSCompatibleVersions {1.0, 2.0, 3.0, 4.0} PSRemotingProtocolVersion 2.2
на работающем сервере, и
Name Value ---- ----- PSVersion 4.0 WSManStackVersion 3.0 SerializationVersion 1.1.0.1 CLRVersion 4.0.30319.34209 BuildVersion 6.3.9600.16406 PSCompatibleVersions {1.0, 2.0, 3.0, 4.0} PSRemotingProtocolVersion 2.2
на сервере, с которым у меня возникла проблема.
- Не совсем нет разницы в базовом
variable:
приводе. - Разумные различия в
env:
содержании - И у них обоих ExecutionPolicy установлен на RemoteSigned.
Итак, различия в том,незначительныйверсия. Но первый сервер будет запускать пример классов животных, который идет сРазвертывание PSClass, а второй — нет.
И я отследил это в отладчике до второго вызова Attach-PSScriptMethod
, независимо от того, в отладчике или нет, второй сервер просто зависает на этом вызове.
Обновлять:Только что получил изменение для обновления моего первого сервера до Build 6.3.30319.34209, той же младшей версии, что и у второго (и той же CLRVersion). Теперь пример тоже ломается. Похоже, Microsoft сломала библиотеку PSClass.
Надеюсь, не слишком много скриптов полагаются на используемую там объектно-ориентированную модель, потому что если они сломают простой пример, то они могли бы сломать и более сложный код.
Я до сих пор не могу даже заставить его выгрузитьпроблемав нем есть
решение1
Начиная с Powershell версии 4.0 и выше вы можете использовать $PSVersionTable. Для версий ниже 4.0 вам нужно будет использоватьGet-Host