Странная проблема PowerShell: [ref] нельзя применить к переменной, которая не существует - PullRequest
2 голосов
/ 25 марта 2019

Мой сценарий Powershell завершился с «[ref] не может быть применен к переменной, которая не существует» через некоторое время (на самом деле он работал некоторое время)

Фрагмент кода похож на

function outputData(...) {
    $data = $null
    if ($outputQueue.TryTake([ref] $data, 1000) -eq $false) {
        continue
    }
    Write-Host $data
}

Ошибки детализации в конце приведены ниже:

[ref] cannot be applied to a variable that does not exist.
At C:\Program Files\mfile.ps1:1213 char:13
+         if ($outputQueue.TryTake([ref] $data, 1000) -eq $ ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (data:VariablePath) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : NonExistingVariableReference

Могу ли я спросить, есть ли мысли о причине?

Спасибо!

1 Ответ

2 голосов
/ 25 марта 2019

Хотя сообщения об ошибках не всегда полезны, это:

Он сообщает вам, что переменная $data, которую вы пытаетесь использовать с [ref], должна уже существовать , т. Е. Должна быть создана явно , что в PowerShell означает:

  • создание его путем присвоения ему значения - даже если это значение $null,
  • или используя New-Variable для его создания.

Упрощенный пример:

$data = $null # create variable $data

# OK to use $data with [ref], now that it exists.
# $data receives [int] value 10 in the process.
[int]::TryParse('10', [ref] $data) 
...