我的 PowerShell 执行环境是否已被严重破坏?

我的 PowerShell 执行环境是否已被严重破坏?

我不期待得到答案,但我希望得到一个方向。

有时,PowerShell ISE 似乎表现得很奇怪。奇怪的现象似乎无缘无故出现。我还没有找到重现这种行为的方法。

三天前,我正在编写对 CERT:\ 驱动器进行操作的代码,Intellisense 向我显示了文件系统提供程序(-File-Directory)而不是证书提供程序(-ExpiringInDays)的参数。

今天,这段代码引发了一个异常。

Invoke-Command -ComputerName OneServer -Credential $admin `
    -ScriptBlock {Get-ChildItem -Path CERT:\ -Recurse -ExpiringInDays 366}
系统无法打开指定的设备或文件
    + 类别信息:未指定:(:)[Get-ChildItem],Win32Exception
    + 完全合格的错误标识: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 行为(上文)。
  • 每次打开 ISE,Pester 单元测试都会针对我的所有生产代码运行。偶尔,很多测试都会失败。如果我再次手动运行它们,它们就会成功。打开一个新的 ISE 窗口,它们就会成功。

我该如何隔离此类问题?

PS > $PS版本表

名称值                                                                                                                                                                                               
---- -----                                                                                                                                                                                               
PS版本 5.1.15063.413                                                                                                                                                                                       
PSEdition 桌面版                                                                                                                                                                                             
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}                                                                                                                                                                             
版本号 10.0.15063.413                                                                                                                                                                                      
CLR版本 4.0.30319.42000                                                                                                                                                                                     
WSManStack版本 3.0                                                                                                                                                                                                 
PSRemotingProtocol版本 2.3                                                                                                                                                                                                 
序列化版本 1.1.0。

远程服务器也类似:自动化作业每天都会针对我们所有的生产服务器运行 Invoke-Command 脚本,不会出现任何错误。很有可能。也许。

相关内容