【问题标题】:Powershell SCCM PSDrive and Out-File -Path parameter resulting errorPowershell SCCM PSDrive 和 Out-File -Path 参数导致错误
【发布时间】:2016-12-21 01:01:31
【问题描述】:

我有一个我编写的日志记录模块,它使用 Out-File -Append 将各种行写入文件。我正在为 SCCM 编写一些脚本和模块。大多数 SCCM 功能/命令不允许您通过参数定位特定的提供程序/位置。

这意味着我需要切换到“CMSite”提供程序来运行大部分命令。

我遇到的问题是,如果我切换到“CMSite”提供程序,它会由于某种原因中断我的日志记录,从而导致错误:

PSLogging.psm1 (144, 15): ERROR: At Line: 144 char: 15
ERROR: +             $logline | Out-File -Append -Encoding utf8 -FilePath $logFullPath;
ERROR: +                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ERROR:     + CategoryInfo          : InvalidArgument: (:) [Out-File], PSInvalidOperationException
ERROR:     + FullyQualifiedErrorId : ReadWriteFileNotFileSystemProvider,Microsoft.PowerShell.Commands.OutFileCommand
ERROR: Out-File : Cannot open file because the current provider (AdminUI.PS.Provider\CMSite) cannot open a file.

即使我在 Out-File 参数中提供了完整路径。错误显然是因为 CMSite 提供程序不是文件系统提供程序,但我认为提供完整路径将是上下文相关的并自动使用正确的提供程序?

如果我这样做:

Set-Location C:

在记录任何东西之前它工作正常。

我想到的一件事是日志记录位置实际上是一个 UNC 路径(我们用全局变量控制),也许它没有正确切换提供程序,因为它不是“PSDrive”提供程序?

我是否遗漏了什么,或者我需要'Set-Location'并在每次我想对文件运行日志记录命令时切换 PSDrive?

【问题讨论】:

  • 我只能在不提供完整路径时复制它。您如何确认$logFullPath 包含完整的驱动器和目录详细信息?
  • 通过输出变量,因为如果我更改 PSDrive(我的日志记录模块记录日志中的日志路径)它会起作用

标签: powershell sccm


【解决方案1】:

是的,将 UNC 路径定义为文件系统提供程序需要一点帮助。试试这个:

$logline | Out-File -Append -Encoding utf8 -FilePath ('FileSystem::' + $logFullPath)

编辑:更多信息 PowerShell Gotcha: UNC paths and Providers

【讨论】:

  • 你是个天才。对我的日志记录模块进行了微小的修改,它就像一个魅力。我为此挠头的时间比我应该做的要长得多。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 2019-03-25
  • 2011-08-31
  • 2013-02-15
  • 1970-01-01
  • 2023-02-02
  • 2023-02-24
相关资源
最近更新 更多