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



我试着写一个带有一些调试输出的日志文件。我的顺序运行很好,但一旦我在更多的实例中启动baseapplication,我得到一个错误。

Der Prozess kann night auf die Datei zugreifen, Der Prozess einen Teil Der Datei gesperert。:"B: Startup.log日志"这个进程不能访问这个文件,因为它被另一个进程锁定了。

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

do{
$Failed = $false
Try{
Write-Output "C:KFZBoothSoftware2_remove.bgAIBackgroundRemove.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或其他moffice文件进行日志记录:

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

$FileName = 'D:tempTestDoc.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:transcriptstranscript0.txt" -NoClobber
#>
Get-help -Name Start-Transcript -Full
Get-help -Name Start-Transcript -Online

最新更新