Out-File:不接受输出文件路径

时间:2016-09-09 16:49:21

标签: powershell

仍在学习并且很难尝试将信息输出到文件:输出文件路径不被接受

我的位置为PS Cert:\localmachine ,这是整个命令:

$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

我收到的错误消息是:

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

2 个答案:

答案 0 :(得分:3)

根据上述评论,问题来自于当前位置位于证书提供程序(cert:)中的某个位置。 一种可能的解决方法/解决方案是在写入文件之前将当前位置更改回文件提供程序。

$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

第二种解决方案:使用明确包含文件系统提供程序的路径:

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

答案 1 :(得分:0)

使用背景信息补充here

如果您使用... | Out-File C:\temp\out.txt # OK, due to using filesystem drive C:并且当前位置位于文件系统提供商以外的提供商的驱动器上:< / p>

  • 基于驱动器号的路径被识别为文件系统路径; e.g:

    • FileSystem::
  • 任何其他路径需要前缀\path\to\... ,特别是包括\\server\share\path\to\...甚至... | 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
    • Out-File

可以说,鉴于-FilePath只创建文件,总是将-LiteralPath / Out-File参数解释为< em> filesystem 路径,,不论当前位置的提供者

但是,以下PoorKenny's effective solutions附带的示例表明行为按设计((省略)示例从当前调用tf.image.rot90() 注册管理机构提供商驱动器上的位置。

  

由于Windows PowerShell注册表提供程序不支持Out-File,因此必须在值中指定文件系统驱动器名称(例如c:)或提供程序的名称后跟两个冒号(FileSystem ::)的FilePath参数。   &#34;

如果有人知道总是默认 filesystem 提供商的当前位置是否真的有充分理由,请告诉我们。
(可以有其他替代文件系统提供程序吗?)。