微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Powershell:使用并行文件访问写入日志文件

我尝试用一​​些调试输出一个日志文件。 我的它在顺序运行时运行良好,但是一旦我在更多情况下启动基础应用程序,我就会收到错误

Der Prozess kann nicht auf die Datei zugreifen,da ein anderer Prozess einen Teil der Datei gesperrt hat。 : 'B:\Logfiles\Startup.log' 该进程无法访问该文件,因为它被另一个进程锁定。

所以我尝试做一个 do - try - catch 构造来在文件被锁定时重试。 但由于某种原因,这不起作用:(

do{
    $Failed = $false
    Try{
        Write-Output "C:\KFZBooth\Software\02_remove.bg\AIBackgroundRemove.exe" -ArgumentList '"batch"',`"$Original`",'""',`"$AIAusgabepfad\$Originaldatei$Originaltyp`" | Out-file $startUpLog -append
    } catch { 
        $Failed = $true
        Write-Host "RETRY Reduce Credit"
        Write-Host $_.Exception.Message
        Write-Host $_.Exception.ItemName
        Write-Output "Logproblem im Startup.log - RETRY" | Out-file $UsageLog -append
    } 
} while ($Failed)

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

解决方法

这真的取决于文件类型。例如,如果您使用 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 创建和使用新的事件日志

https://devblogs.microsoft.com/scripting/use-powershell-to-create-and-to-use-a-new-event-log/

您是否考虑过使用 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。