Моя среда выполнения PowerShell слегка повреждена?

395
Mike Sherrill 'Cat Recall'

Я не ожидаю ответа, но я надеюсь на направление.

Иногда PowerShell ISE, кажется, просто ведет себя странно. Странность, кажется, возникла из ниоткуда. Я не нашел способ воспроизвести поведение.

Три дня назад я писал код, который работал на диске CERT: \, и Intellisense показывал мне параметры для поставщика файловой системы ( -Fileи -Directory) вместо поставщика сертификатов ( -ExpiringInDays).

Сегодня этот код вызвал исключение.

Invoke-Command -ComputerName OneServer -Credential $admin ` -ScriptBlock  
Система не может открыть указанное устройство или файл + CategoryInfo: NotSpecified: (:) [Get-ChildItem], Win32Exception + FullyQualifiedErrorId: System.ComponentModel.Win32Exception, Microsoft.PowerShell.Commands.GetChildItemCommand + PSComputerName: один сервер 

Запуск этого фрагмента на моем локальном компьютере в том же сеансе PowerShell вызвал то же исключение.

Get-ChildItem -Path CERT:\ -Recurse -ExpiringInDays 366 

То же исключение для CERT:, CERT:\и CERT:\*.

Если я углубился на один каталог, используя -Path CERT:\LocalMachineего, он работал без возникновения исключения, но возвращал сертификаты, срок действия которых истекает через несколько лет (более 366 дней).

Я переключился на другой сеанс PowerShell, вставил оба фрагмента, и оба работали нормально. Переменная $adminустановлена ​​правильно в обеих сессиях. Мне кажется, это указывает на то, что что-то идет не так в среде исполнения. Но чуть выше Invoke-Command и локальная команда выдают одну и ту же ошибку. Я не понимаю этого.

Журналы событий PowerShell (в Microsoft / Windows / PowerShell / Operational) не показывают ошибку для этого исключения, но они показывают ошибку «Доступ запрещен», связанный с Invoke-Command.

WSMan сообщил об ошибке с кодом ошибки: 5.  Сообщение об ошибке: Не удалось подключиться к удаленному серверу oneserver со следующим сообщением об ошибке: Доступ запрещен.  

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

Другие вещи, которые могут иметь отношение

  • Я отключаюсь, выхожу или перезагружаюсь только тогда, когда Windows заставляет меня это делать.
  • У меня обычно открыто несколько окон PowerShell ISE. Они могут оставаться открытыми в течение нескольких дней. За это время они работают нормально. (Но я действительно знаю?)
  • Иногда код без переменных завершится сбоем или выдаст странный вывод в одном окне, но будет работать как положено в другом. Я не всегда замечаю, что результат странный. (PowerShell сообщает мне, что срок действия сертификатов не истечет до 2020 года. Это правда или странно? Я не всегда знаю.)
  • Странное поведение IntelliSense (выше).
  • Юнит-тесты Pester запускаются против всего моего производственного кода каждый раз, когда я открываю ISE. Однажды, куча из них потерпит неудачу. Если я запускаю их снова вручную, они успешны. Откройте новое окно ISE, и они преуспеют.

Как я могу изолировать такого рода проблемы?

PS> $ PSVersionTable  Имя Значение  ---- -----  PSVersion 5.1.15063.413  PSEdition Desktop  PSCompatibleVersions  BuildVersion 10.0.15063.413  CLRVersion 4.0.30319.42000  WSManStackVersion 3.0  PSRemotingProtocolVersion 2.3  Версия Serialization 1.1.0. 

Удаленные серверы похожи: автоматические задания ежедневно запускают сценарии Invoke-Command для всех наших производственных серверов без ошибок. Наверное. Может быть.

0
Каковы результаты при запуске Powershell от имени администратора? Ваш клиент и удаленный компьютер находятся в одном домене? Думая о возможной проблеме двойного прыжка Kerberos. root 6 лет назад 0
@root: Обычно я не запускаю PowerShell от имени администратора, поэтому у меня нет ответа. Клиент и все серверы находятся в одном домене. Хорошая мысль о проблеме двойного прыжка, но это не происходит здесь. Очень похожий код работает на всех наших серверах каждый день без ошибок. (Похоже.) Mike Sherrill 'Cat Recall' 6 лет назад 0
Начните с `chkdsk` и` sfc / scannow` и, если нет результатов, продолжите переустановку PowerShell. harrymc 6 лет назад 0
[Начиная с Windows PowerShell 3.0, модуль Microsoft.PowerShell.Security, содержащий диск Cert:, не импортируется автоматически в каждый сеанс. Чтобы использовать диск `Cert:`, используйте командлет `Import-Module` для импорта модуля или выполните команду, которая использует диск` Cert: `, например команду" `Set-Location Cert:` ".] (https://msdn.microsoft.com/en-us/powershell/reference/6/microsoft.powershell.security/providers/get-childitem-for-certificate) JosefZ 6 лет назад 0
@JosefZ: Спасибо за это напоминание. Но "gci -Path Cert: \" в какой-то момент не удался, и "gci -Path Cert: \ LocalMachine" вернул сертификаты. Он вернул слишком много сертификатов, но все еще вернул сертификаты. Mike Sherrill 'Cat Recall' 6 лет назад 0
@harrymc: Никаких ошибок, за исключением некоторых "дубликатов владельцев каталога ...". Я закончил вчера на работе с полной резервной копией, готовясь к переустановке PowerShell. Mike Sherrill 'Cat Recall' 6 лет назад 0
Я предлагаю сначала исправить все ошибки диска. harrymc 6 лет назад 0

0 ответов на вопрос