Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell在启动作业调用时将数据以文本形式存储在变量中_Powershell_Jobs - Fatal编程技术网

Powershell在启动作业调用时将数据以文本形式存储在变量中

Powershell在启动作业调用时将数据以文本形式存储在变量中,powershell,jobs,Powershell,Jobs,我有一个脚本,可以在启动时生成日志文件,在其中写入内容,然后完成。 它在主脚本上运行得很好,但是当使用start job将变量传递给子脚本时,会再次对其求值 下面是我如何定义此变量的: $logFile = (Get-Location|Select -expand Path)+"\"+(Get-Date -uformat "%Y-%m-%d-%H-%M-%S")+".log" 以下是我如何在主脚本中写入要登录的数据: "here is some log data" | Out-File -Fi

我有一个脚本,可以在启动时生成日志文件,在其中写入内容,然后完成。 它在主脚本上运行得很好,但是当使用start job将变量传递给子脚本时,会再次对其求值

下面是我如何定义此变量的:

$logFile = (Get-Location|Select -expand Path)+"\"+(Get-Date -uformat "%Y-%m-%d-%H-%M-%S")+".log"
以下是我如何在主脚本中写入要登录的数据:

"here is some log data" | Out-File -FilePath $logFile -Append
以下是我如何开始工作:

$job=Start-Job -Name "myjob" -FilePath ".\worker.ps1" -ArgumentList
$logFile
问题是,当我将数据写入worker.ps1子脚本内的日志时,$logfile值会再次求值,然后我会得到多个不同的日志文件,而不是一个:因为在使用start job调用$logfile时,似乎会再次求值

我的工人看起来像这样:

Param (

    [Parameter(Mandatory=$True)]
    [string]$logFile
)

"This is a test" | Out-File -FilePath $logFile -Append
我最后吃了 2017-02-20-13-55-23.log 2017-02-20-13-56-20.log 2017-02-20-13-57-14.log

我相信这不是它应该如何工作,$logFile变量不应该再次得到评估,但在工作中我得到了一些有趣的经验,我想在这方面得到一些帮助


感谢您的想法

既然您面临这个问题,我建议您将这一行放在您的worker.ps1中。这将帮助您:

Param (

    [Parameter(Mandatory=$True)]
    [string]$logFile
)
Remove-Variable logFile -Force -ErrorAction Ignore
"This is a test" | Out-File -FilePath $logFile -Append
这将在每次之前删除该变量,以便启动$logfile的新实例


希望有帮助。

您是否考虑过使用环境变量,或使用
设置变量创建变量,并指定更大的范围?好主意!我尝试了“设置变量-名称“logFile”-值((获取位置|选择-扩展路径)+“\”+(获取日期-格式“%Y-%m-%d-%H-%m-%S”)+“=.log”)-选项常量-作用域全局”,但我遇到了相同的问题:(使用powershell有时很难获得简单的东西。我认为我的问题可以总结如下:“如何将cmdlet生成的文本存储在变量中而不是生成代码中”。我需要一个$logFile=(一些cmdlet).ToStringandnototherextremelyAnnoyingPowerShellObjects嗯,我认为问题不在于你认为它是什么。字符串是一个字符串,它不会重新计算,而你拥有的是一个字符串。检查你定义$logfile的位置,确保它不在任何循环或任何东西中,也确保你没有在你的下标中定义它。试试环境改为ent变量。全局将不会与作业共享。