У меня есть сценарий, который генерирует файл журнала при запуске, записывает в него вещи и делает. Он хорошо работает на основном скрипте, но переменная снова оценивается при передаче в индексы с использованием 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 не должна оцениваться снова, но с заданиями я получаю некоторые забавные впечатления и я хотел бы помочь вам в этом.
Спасибо за идеи
Считаете ли вы использование переменной окружения или создание переменной с помощью 'Set-Variable' и определение более широкой области? https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/set-variable – gvee
Хорошая идея! Я попробовал «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
Когда-нибудь трудно получить что-то легкое с помощью PowerShell. Я думаю, что моя проблема может быть сведена следующим образом: «как для хранения текста, созданного из командлетов внутри переменной, а не кода генерации ". Мне нужен $ logFile = (some-cmdlet) .toStringAndNotAnotherExtremelyAnnoyingPowershellObject – tntteam22