2016-09-09 1 views
1

Immer noch lernen und habe eine harte Zeit versucht, Informationen in eine Datei auszugeben: Ausgabedatei Pfad wird nicht akzeptiert.Out-File: Pfad der Ausgabedatei wird nicht akzeptiert

Meine Lage ist PS Cert:\localmachine und hier ist der gesamte Befehl:

$cert = Get-ChildItem -Path cert: -Recurse | where { $_.notafter -le (get-date).AddDays(75) -AND $_.notafter -gt (get-date)} | select notafter, issuer, thumbprint, subject | sort-object notafter 
$cert | Out-File -FilePath \\ad.dcpds.cpms.osd.mil\WinAdm\Logs\Expiring_Certificates\$hostname.log 

Die Fehlermeldung Ich erhalte ist:

Out-File : Cannot open file because the current provider (Microsoft.PowerShell.Security\Certificate) cannot open a file.

Antwort

3

Basierend auf den obigen Ausführungen, Das Problem rührt daher, dass sich der aktuelle Standort irgendwo im Zertifikatsanbieter befindet (cert:). . Eine mögliche Problemumgehung/Lösung besteht darin, den aktuellen Standort zurück zum Dateianbieter zu ändern, bevor die Datei geschrieben wird.

$cert = Get-ChildItem -Path cert: -Recurse | where { $_.notafter -le (get-date).AddDays(75) -AND $_.notafter -gt (get-date)} | select notafter, issuer, thumbprint, subject | sort-object notafter 
Set-location c: 
$cert | out-file -FilePath \\ad.dcpds.cpms.osd.mil\WinAdm\Logs\Expiring_Certificates\$h‌​ostname.log 

Zweite Lösung: einen Pfad verwenden, der die Dateisystem-Provider explizit beinhaltet:

$cert | out-file -FilePath FileSystem::\\ad.dcpds.cpms.osd.mil\WinAdm\Logs\Expiring_Certificates\$h‌​ostname.log 
0

PoorKenny's effective solutions mit Hintergrundinformationen ergänzen:

Wenn Sie Out-File und den aktuellen Standort verwenden ist auf einer Festplatte eines Providers anders als das Dateisystem Provider:

  • nur Laufwerksbuchstaben basierte Pfade werden als Dateisystem Pfade erkannt; z.B .:

    • ... | Out-File C:\temp\out.txt # OK, due to using filesystem drive C:
  • andere Pfad erfordert Präfix FileSystem::, insbesondere einschließlich Pfade wie \path\to\... und sogar \\server\share\path\to\...; Ohne das Präfix werden sie als relativ zum aktuellen Standort interpretiert, unabhängig von ihrem Provider, der für jeden anderen Anbieter als den Dateisystemanbieter fehlschlägt.

    • ... | Out-File \temp\out.txt # NOT recognized
    • ... | Out-File \\server\share\temp\out.txt # NOT recognized
    • ... | Out-File FileSystem::\temp\out.txt # OK, thanks to 'FileSystem::' prefix

Diskutierbar gegeben, dass Out-File immer nur schafft Dateien, wäre es sinnvoll, immer die -FilePath/-LiteralPath Argumente zu interpretieren a Dateisystem Pfad, unabhängig vom Anbieter des aktuellen Standorts.

jedoch die folgende, von einem Beispiel, das mit den Out-File help kommt schon vermuten läßt, dass das Verhalten nach Design (das (ausgelassen) Beispiel ruft Out-File von einem aktuellen Standort auf den Registry Laufwerk des Anbieters).

Da Out-File vom Provider Windows Powershell-Registry nicht unterstützt wird, müssen Sie die Dateisystemlaufwerk Namen entweder, wie c :, oder den Namen der von zwei Doppelpunkten gefolgt Anbieter, filesystem ::, im Wert des FilePath-Parameters. "

Wenn jemand weiß, ob es wirklich ein guter Grund ist nicht immer auf dem Anbieter aktuellen Standort Dateisystem Standard, lassen Sie es uns wissen.
(kann es sein, zusätzliche, alternative Dateisystem-Anbieter?)

Verwandte Themen