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
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.
Tags powershell powershell-ise