使用变量作为路径时如何传递参数给程序



我试图在start -job scriptblock中使用路径变量启动程序。这一行是:

所有这些变量都可以工作,当我使用c:plink代替$plink变量时,整行都可以工作。它在-telnet上出错了,所以没有得到参数链接。

下面是$var's和job:

谢谢!

这个答案是基于一些假设和对你的问题和评论中解释的可能起作用的预感。

首先解释一下"当PowerShell意外被杀死时,它没有丢失任何数据">,这是因为>>(Out-File -Append的别名)是:

  1. 打开文件流
  2. 将输出附加到文件
  3. 关闭流

所以,当你终止工作时,那里的东西基本上还在那里。我确实建议你使用Set-Content,但这是在我理解你在做什么之前,在这种情况下,这将不是一个选项。

这里建议的替代方案是使用StreamWriter,这很好,因为我们可以保持文件流打开并根据需要追加到文件中,而不需要每次都关闭流(这还将处理日志文件输出中每行之间的"空白行)。为了避免杀死Job,但仍将结果保存到文件,我们可以使用try / finally语句。
$LogDir     = "c:usersuser" # Log file output directory
$PlinkDir   = "C:"            # plink.exe directory
$SerialIP   = "1.1.1.1"       # serial device IP address
$SerialPort = 10000           # port to log
function CaptureWeight {
Start-Job -Name WeightLog -ScriptBlock {
filter timestamp {
$sw.WriteLine("$(Get-Date -Format MM/dd/yyyy_HH:mm:ss) $_")
}
try {
$sw = [System.IO.StreamWriter]::new("$using:LogDirWeightLog_$(Get-Date -f MM-dd-yyyy).txt")
& "$using:PlinkDirplink.exe" -telnet $using:SerialIP -P $using:SerialPort | TimeStamp
}
finally {
$sw.ForEach('Flush')
$sw.ForEach('Dispose')
}
}
}
$job = CaptureWeight     # For testing, save the job
Start-Sleep -Seconds 60  # wait 1 minute
$job | Stop-Job          # kill the job
Get-Content "$LogDirWeightLog_$(Get-Date -f MM-dd-yyyy).txt" # Did it work?

最新更新