Powershell:使用并行文件访问权限写入日志文件

Powershell:使用并行文件访问权限写入日志文件,powershell,logfile,locked-files,Powershell,Logfile,Locked Files,我尝试编写一个带有调试输出的日志文件。 我的it在连续运行时运行良好,但一旦在更多实例中启动baseapplication,就会出现错误 在项目实施过程中,您必须遵守以下规定:B:\Logfiles\Startup.log' 进程无法访问该文件,因为它已被另一进程锁定 因此,我尝试执行do-try-catch构造,以便在文件被锁定时重试。 但出于某种原因,这是行不通的:( 是否有更好的方法写入日志文件或等待文件解锁?这实际上取决于文件类型。例如,如果您使用MSWord或其他MSOffice文件进

我尝试编写一个带有调试输出的日志文件。 我的it在连续运行时运行良好,但一旦在更多实例中启动baseapplication,就会出现错误

在项目实施过程中,您必须遵守以下规定:B:\Logfiles\Startup.log' 进程无法访问该文件,因为它已被另一进程锁定

因此,我尝试执行do-try-catch构造,以便在文件被锁定时重试。 但出于某种原因,这是行不通的:(


是否有更好的方法写入日志文件或等待文件解锁?

这实际上取决于文件类型。例如,如果您使用MSWord或其他MSOffice文件进行日志记录:

运行下面的代码,关闭文件,然后打开文件

$FileName = 'D:\temp\TestDoc.docx'
Try 
{
    $FileStream = [System.IO.File]::Open($FileName,'Open','Write')
    $FileStream.Close()
    $FileStream.Dispose()
    ($IsLocked  = $False)
} 
Catch [System.UnauthorizedAccessException] {($IsLocked = 'AccessDenied')} 
Catch {($IsLocked = $True)}
文本文件没有此问题

但是,为什么要使用文件呢?创建自己的事件日志并直接写入

使用PowerShell创建和使用新的事件日志

你看过使用PowerShell成绩单吗

Get-Command -Name '*transcript*' | ft -a
# Results
<#
CommandType Name             Version Source                   
----------- ----             ------- ------                   
Cmdlet      Start-Transcript 3.0.0.0 Microsoft.PowerShell.Host
Cmdlet      Stop-Transcript  3.0.0.0 Microsoft.PowerShell.Host
#>
# Get specifics for a module, cmdlet, or function
(Get-Command -Name Start-Transcript).Parameters
(Get-Command -Name Start-Transcript).Parameters.Keys
Get-help -Name Start-Transcript -Examples
# Results
<#
Start-Transcript
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
#>
Get-help -Name Start-Transcript -Full
Get-help -Name Start-Transcript -Online
Get命令-Name'*transcript*'| ft-a
#结果
#获取模块、cmdlet或函数的详细信息
(Get命令-名称开始记录)。参数
(Get命令-Name Start Transcript).Parameters.Keys
获取帮助-名称开始记录-示例
#结果
获取帮助-姓名开始记录-完整
获取帮助-姓名开始记录-联机
Get-Command -Name '*transcript*' | ft -a
# Results
<#
CommandType Name             Version Source                   
----------- ----             ------- ------                   
Cmdlet      Start-Transcript 3.0.0.0 Microsoft.PowerShell.Host
Cmdlet      Stop-Transcript  3.0.0.0 Microsoft.PowerShell.Host
#>
# Get specifics for a module, cmdlet, or function
(Get-Command -Name Start-Transcript).Parameters
(Get-Command -Name Start-Transcript).Parameters.Keys
Get-help -Name Start-Transcript -Examples
# Results
<#
Start-Transcript
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
#>
Get-help -Name Start-Transcript -Full
Get-help -Name Start-Transcript -Online