繁体   English   中英

在PowerShell中写入包含多个作业的文件

[英]Write to a file with multiple jobs in PowerShell

我们有一个运行以下代码的活动:

$nr = $WorkflowData['_Number']

## Write to text
$nr>>C:\Configuration\nrFile.txt

基本上它会获得一个应该添加到文件中的唯一编号。 问题是此活动在可以同时运行的多个工作流中运行。 这导致了很多错误,说nrFile.txt是由另一个同时运行的作业打开的。

有没有办法同时从多个工作流程写入同一个文件?

或者也许以某种方式排队?

您可以使用互斥锁同步文件访问权限,例如

$mutex = new-object System.Threading.Mutex $false,'SomeUniqueName'
...
nr = $WorkflowData['_Number']
$mutex.WaitOne() > $null
$nr >> C:\Configuration\nrFile.txt
$mutex.ReleaseMutex()

您可以在多个作业尝试访问文件或工作流中的多个活动之间进行切换。 作业被隔离到单独的进程中,因此某些争用防止机制不适用。 工作流程在同一个流程中运行,因此这些方法在这种情况下可能是合适的。

它不是很迷人,但是一个基本的“如果一开始你没有成功,尝试,再试一次”的方法通常完全适合这样的事情。

filter append
{
   param(
       [Parameter(Mandatory = $true, ValueFromPipeline = $true)][string[]] $line,
       [Parameter(Mandatory = $true, Position = 0)][string] $path
   )

   $done = $false
   while(-not $done)
   {
       try{ $line | out-file $path -append -ea Stop }
       catch { sleep 1; continue }
       $done = $true
   }
}

$nr | append C:\Configuration\nrFile.txt

编辑以前错误地声称命名互斥(Keith的方法)不能在进程间工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM