Powershell SCCM PSDrive 和 Out-File -Path 参数导致的错误
Powershell SCCM PSDrive and Out-File -Path parameter resulting error
我有一个我编写的日志记录模块,它使用 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' 并在每次我想 运行 将日志命令记录到文件时切换 PSDrives?
是的,UNC 路径需要一点帮助才能定义为文件系统提供程序。试试这个:
$logline | Out-File -Append -Encoding utf8 -FilePath ('FileSystem::' + $logFullPath)
编辑:更多信息
PowerShell 陷阱:UNC 路径和提供程序
我有一个我编写的日志记录模块,它使用 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' 并在每次我想 运行 将日志命令记录到文件时切换 PSDrives?
是的,UNC 路径需要一点帮助才能定义为文件系统提供程序。试试这个:
$logline | Out-File -Append -Encoding utf8 -FilePath ('FileSystem::' + $logFullPath)
编辑:更多信息 PowerShell 陷阱:UNC 路径和提供程序