Я не ожидаю ответа, но я надеюсь на направление.
Иногда PowerShell ISE, кажется, просто ведет себя странно. Странность, кажется, возникла из ниоткуда. Я не нашел способ воспроизвести поведение.
Три дня назад я писал код, который работал на диске CERT:\, и Intellisense показывал мне параметры для поставщика файловой системы (-File
и -Directory
) вместо поставщика сертификатов (-ExpiringInDays
).
Сегодня этот код вызвал исключение.
Invoke-Command -ComputerName OneServer -Credential $admin `
-ScriptBlock {Get-ChildItem -Path CERT:\ -Recurse -ExpiringInDays 366}
The system cannot open the device or file specified + CategoryInfo : NotSpecified: (:) [Get-ChildItem], Win32Exception + FullyQualifiedErrorId : System.ComponentModel.Win32Exception,Microsoft.PowerShell.Commands.GetChildItemCommand + PSComputerName : oneserver
Запуск этого фрагмента на моем локальном компьютере в том же сеансе 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 reported an error with error code: 5. Error message: Connecting to remote server oneserver failed with the following error message : Access is denied.
Я думаю, что это связано со средой исполнения. Выполнение идентичного кода в другом сеансе PowerShell работало нормально.
Другие вещи, которые могут иметь отношение
- Я отключаюсь, выхожу или перезагружаюсь только тогда, когда Windows заставляет меня это делать.
- У меня обычно открыто несколько окон PowerShell ISE. Они могут оставаться открытыми в течение нескольких дней. За это время они работают нормально. (Но я действительно знаю?)
- Иногда код без переменных завершится сбоем или выдаст странный вывод в одном окне, но будет работать как положено в другом. Я не всегда замечаю, что результат странный. (PowerShell говорит мне, что срок действия сертификатов истекает до 2020 года. Это правильно или это странно? Я не всегда знаю.)
- Странное поведение IntelliSense (выше).
- Юнит-тесты Pester запускаются против всего моего производственного кода каждый раз, когда я открываю ISE. Однажды, куча из них потерпит неудачу. Если я запускаю их снова вручную, они успешны. Откройте новое окно ISE, и они преуспеют.
Как я могу изолировать такого рода проблемы?
PS > $PSVersionTable Name Value ---- ----- PSVersion 5.1.15063.413 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.15063.413 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.
Удаленные серверы похожи: автоматические задания ежедневно запускают сценарии Invoke-Command для всех наших производственных серверов без ошибок. Наверное. Может быть.