Meu ambiente de execução do PowerShell está corrompido subtilmente?

0

Eu não espero uma resposta, mas estou esperando por uma direção.

Às vezes, o PowerShell ISE parece apenas agir, bem, estranho. A estranheza parece surgir do nada. Eu não encontrei uma maneira de reproduzir o comportamento.

Três dias atrás, eu estava escrevendo código que operava na unidade CERT: \ e o Intellisense mostrou-me os parâmetros para o provedor de sistema de arquivos ( -File e -Directory ) em vez do provedor de certificados ( -ExpiringInDays ).

Hoje, esse código gerou uma exceção.

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

A execução desse snippet dele na minha máquina local na mesma sessão do PowerShell gerou a mesma exceção.

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

Mesma exceção para CERT: , CERT:\ e CERT:\* .

Se eu for a um diretório mais fundo, usando -Path CERT:\LocalMachine , ele correu sem gerar uma exceção, mas retornou certificados que expiram por vários anos (mais de 366 dias) a partir de agora.

Eu mudei para uma sessão diferente do PowerShell, colada em ambos os snippets, e os dois correram bem. A variável $admin está definida corretamente em ambas as sessões. Para mim, isso parece apontar para algo errado no ambiente de execução. Mas logo acima, Invoke-Command e um comando local levantaram o mesmo erro. Eu não entendo isso.

Os logs de eventos do PowerShell (em Microsoft / Windows / PowerShell / Operacional) não mostram um erro para essa exceção, mas mostram um erro "Acesso negado" relacionado a 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. 

Acho que isso está relacionado ao ambiente de execução. Executar código idêntico em uma sessão diferente do PowerShell funcionou bem.

Outras coisas que podem ser relevantes

  • encerro, faço logoff ou reinicio somente quando o Windows me obriga.
  • Eu geralmente tenho mais de uma janela do PowerShell ISE aberta. Eles podem ficar abertos por dias. Durante esse tempo, eles parecem funcionar bem. (Mas eu realmente saberia?)
  • Às vezes, o código sem variáveis falhará ou produzirá uma saída estranha em uma janela, mas funcionará como esperado em outra. Eu nem sempre noto que a saída é estranha. (O PowerShell me diz que nenhum certificado irá expirar antes de 2020. Isso é certo, ou é estranho? Eu nem sempre sei.)
  • Comportamento estranho do IntelliSense (acima).
  • Os testes da unidade Pester são executados em todo o meu código de produção toda vez que eu abro o ISE. De vez em quando, um monte deles irá falhar. Se eu os executar de novo manualmente, eles serão bem sucedidos. Abra uma nova janela do ISE e eles serão bem-sucedidos.

Como eu isolo esse tipo de problema?

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.

Os servidores remotos são semelhantes: as tarefas automatizadas executam scripts Invoke-Command em todos os nossos servidores de produção todos os dias, sem erros. Provavelmente. Talvez.

    
por Mike Sherrill 'Cat Recall' 31.07.2017 / 20:32

0 respostas