Ist meine PowerShell-Ausführungsumgebung subtil beschädigt?

512
Mike Sherrill 'Cat Recall'

Ich erwarte keine Antwort, aber ich hoffe auf eine Richtung.

Manchmal scheint die PowerShell ISE einfach nur komisch zu sein. Die Komik scheint aus dem Nichts zu kommen. Ich habe keinen Weg gefunden, das Verhalten zu reproduzieren.

Vor drei Tagen habe ich Code geschrieben, der auf dem Laufwerk CERT: \ ausgeführt wurde, und Intellisense zeigte mir die Parameter für den Dateisystemanbieter ( -Fileund -Directory) anstelle des Zertifikatsanbieters ( -ExpiringInDays) an.

Heute hat dieser Code eine Ausnahme ausgelöst.

Invoke-Command -ComputerName OneServer -Credential $admin ` -ScriptBlock  
Das System kann das angegebene Gerät oder die angegebene Datei nicht öffnen + CategoryInfo: NotSpecified: (:) [Get-ChildItem], Win32Exception + FullyQualifiedErrorId: System.ComponentModel.Win32Exception, Microsoft.PowerShell.Commands.GetChildItemCommand + PSComputername: Server 

Das Ausführen dieses Ausschnitts auf meinem lokalen Computer in derselben PowerShell-Sitzung hat dieselbe Ausnahme ausgelöst.

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

Gleiche Ausnahme CERT:, CERT:\und CERT:\*.

Wenn ich tiefer in ein Verzeichnis ging -Path CERT:\LocalMachine, lief es ohne Ausnahme, aber es wurden Zertifikate zurückgegeben, die mehrere Jahre (mehr als 366 Tage) ablaufen.

Ich wechselte zu einer anderen PowerShell-Sitzung, in die diese beiden Ausschnitte eingefügt wurden, und beide liefen gut. Die Variable $adminwird in beiden Sitzungen korrekt festgelegt. Dies scheint mir darauf hinzuweisen, dass in der Ausführungsumgebung etwas schief läuft. Unmittelbar darüber haben Invoke-Command und ein lokaler Befehl den gleichen Fehler ausgelöst. Das verstehe ich nicht

In den PowerShell-Ereignisprotokollen (unter Microsoft / Windows / PowerShell / Operational) wird für diese Ausnahme kein Fehler angezeigt. Sie zeigen jedoch den Fehler "Zugriff verweigert" im Zusammenhang mit Invoke-Command.

WSMan hat einen Fehler mit Fehlercode gemeldet: 5.  Fehlermeldung: Das Herstellen einer Verbindung zum Remote-Server-Einerserver ist mit der folgenden Fehlermeldung fehlgeschlagen: Zugriff wird verweigert.  

Ich denke, das hängt mit der Ausführungsumgebung zusammen. Das Ausführen von identischem Code in einer anderen PowerShell-Sitzung hat gut funktioniert.

Andere Dinge, die relevant sein könnten

  • Ich werde heruntergefahren, abgemeldet oder erst dann neu gestartet, wenn Windows mich dazu zwingt.
  • Ich habe normalerweise mehr als ein PowerShell ISE-Fenster geöffnet. Sie könnten für Tage offen bleiben. Während dieser Zeit scheinen sie gut zu funktionieren. (Aber würde ich es wirklich wissen?)
  • Manchmal schlägt Code ohne Variablen fehl oder erzeugt eine seltsame Ausgabe in einem Fenster, funktioniert jedoch in einem anderen Fenster wie erwartet. Ich merke nicht immer, dass die Ausgabe seltsam ist. (PowerShell sagt mir, dass keine Zertifikate vor 2020 ablaufen. Ist das richtig oder ist es seltsam? Ich weiß es nicht immer.)
  • Unheimliches IntelliSense-Verhalten (oben).
  • Jedes Mal, wenn ich die ISE öffne, laufen die Pester-Unit-Tests gegen meinen gesamten Produktionscode. Hin und wieder wird eine Reihe von ihnen versagen. Wenn ich sie manuell erneut starte, sind sie erfolgreich. Öffnen Sie ein neues ISE-Fenster.

Wie isoliere ich diese Art von Problem?

PS> $ PSVersionTable  Name Wert  ---- -----  PSVersion 5.1.15063.413  PSEdition Desktop  PSCompatibleVersions  BuildVersion 10.0.15063.413  CLRVersion 4.0.30319.42000  WSManStackVersion 3.0  PSRemotingProtocolVersion 2.3  Serialisierungsversion 1.1.0. 

Remote-Server sind ähnlich: Automatisierte Jobs führen jeden Tag fehlerfrei Invoke-Command-Skripts auf allen Produktionsservern aus. Wahrscheinlich. Könnte sein.

0
Was sind die Ergebnisse, wenn Sie Powershell als Administrator ausführen? Befinden sich Ihr Client und der Remote-Computer in derselben Domäne? Denken Sie an ein mögliches Kerberos-Double-Hop-Problem. root vor 7 Jahren 0
@ root: Normalerweise führe ich PowerShell normalerweise nicht als Administrator aus, daher habe ich keine Antwort. Client und alle Server befinden sich in derselben Domäne. Guter Gedanke über ein Double-Hop-Problem, aber das passiert hier nicht. Sehr ähnlicher Code wird jeden Tag fehlerfrei auf allen unseren Servern ausgeführt. (Ich vermute.) Mike Sherrill 'Cat Recall' vor 7 Jahren 0
Beginnen Sie mit `chkdsk` und` sfc / scannow`. Falls keine Ergebnisse angezeigt werden, installieren Sie PowerShell erneut. harrymc vor 7 Jahren 0
[Ab Windows PowerShell 3.0 wird das Modul "Microsoft.PowerShell.Security", das das Laufwerk "Cert:" enthält, nicht automatisch in jede Sitzung importiert. Um das Laufwerk `Cert:` zu verwenden, importieren Sie das Modul mithilfe des Cmdlets `Import-Module`, oder führen Sie einen Befehl aus, der das Laufwerk 'Cert:` verwendet, z. B. den Befehl "Set-Location Cert:` ".] (https://msdn.microsoft.com/de-de/powershell/reference/6/microsoft.powershell.security/providers/get-childitem-for-certificate) JosefZ vor 7 Jahren 0
@JosefZ: Danke für diese Erinnerung. "Gci -Path Cert: \" schlug jedoch einmal fehl und "gci -Path Cert: \ LocalMachine" gab Zertifikate zurück. Es wurden zu viele Zertifikate zurückgegeben, es wurden jedoch noch Zertifikate zurückgegeben. Mike Sherrill 'Cat Recall' vor 7 Jahren 0
@ harrymc: Außer einigen "doppelten Besitzern für Verzeichnis ..." keine Fehler. Ich habe gestern bei der Arbeit mit einem vollständigen Backup geendet, um die Neuinstallation von PowerShell vorzubereiten. Mike Sherrill 'Cat Recall' vor 7 Jahren 0
Ich empfehle, zunächst alle Festplattenfehler zu beheben. harrymc vor 7 Jahren 0

0 Antworten auf die Frage