2017-02-20 24 views
0

У меня есть сценарий, который генерирует файл журнала при запуске, записывает в него вещи и делает. Он хорошо работает на основном скрипте, но переменная снова оценивается при передаче в индексы с использованием start-job.Powershell хранит данные в переменной как текст при вызове 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 

Проблема заключается в том, что я записываю данные в журнал внутри моего индекса employee.ps1, значение $ logfile оценивается как aga in, то в итоге у меня есть несколько разных файлов журналов, а не один: поскольку $ logFile снова оценивается при вызове с start-job.

Мой рабочий выглядит следующим образом:

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 не должна оцениваться снова, но с заданиями я получаю некоторые забавные впечатления и я хотел бы помочь вам в этом.

Спасибо за идеи

+0

Считаете ли вы использование переменной окружения или создание переменной с помощью 'Set-Variable' и определение более широкой области? https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/set-variable – gvee

+0

Хорошая идея! Я попробовал «Set-Variable -Name» logFile »-Value ((Get-Location | Select -expand Path) +« \ »+ (Get-Date -uformat»% Y-% m-% d-% H-% M -% S ") +" =. Log ") -Option constant -Scope global", но у меня такая же проблема :( – tntteam22

+0

Когда-нибудь трудно получить что-то легкое с помощью PowerShell. Я думаю, что моя проблема может быть сведена следующим образом: «как для хранения текста, созданного из командлетов внутри переменной, а не кода генерации ". Мне нужен $ logFile = (some-cmdlet) .toStringAndNotAnotherExtremelyAnnoyingPowershellObject – tntteam22

ответ

0

Поскольку Вы сталкиваетесь этот вопрос, я рекомендую вам поставить эту строку внутри worker.ps1. Это должно помочь вам:

Param (

    [Parameter(Mandatory=$True)] 
    [string]$logFile 
) 
Remove-Variable logFile -Force -ErrorAction Ignore 
"This is a test" | Out-File -FilePath $logFile -Append 

Это будет удалить переменное каждый раз перед тем чтобы новый экземпляр $ логфайла получит инициирован.

Надеюсь, это поможет.