Ваша проблема не в том, чтобы путать или контекст с этим?
-OutVariable и присвоение переменной?
Это потому, что вы используете строку в первомодин не прав.Двойные кавычки приводят к расширению переменной, но в вашем случае вам нужно изменить интерполяцию строки для этой переменной $ cert с точками.Итак, вы неправильно понимаете расширение строки.
Это ...
Get-ChildItem -Path "Cert:\CurrentUser\My\$cert.Thumbprint";
... должно быть сделано следующим образом.
Get-ChildItem -Path "Cert:\CurrentUser\My\$($cert.Thumbprint)"
..иначе PowerShell не знает, что это такое.Кроме того, эти точки с запятой никогда не нужны в самом PowerShell.Это специальный маркер, разделяющий отдельные сегменты кода.Если у вас все это в одной строке, это не так, но не так, как вы используете это здесь.
Если вы делаете это в ISE или VSCode, вы увидите изменение цветовой кодировки, чтобы отразитькоторый будет расширен, а какой нет.
См. эту статью. Расширение строки Powershell
Переменная интерполяция или два типа строк Строки с одинарными кавычками (') являются литеральными строками, что означает отсутствие специальных символов;каждый символ в строке будет выводиться как сам по себе.Строки с двойными кавычками (") в powershell расширяют переменные и экранирующие символы внутри строки; это называется интерполяцией.
И этот, хотя он и обращается к Here-Strings, он по-прежнему охватываетвот что я пытаюсь здесь сделать.
Расширение переменной в строках и здесь-строках
Теперь что касается вашего поста вопроса ...
Есть ли функциональная разница между -OutVariable и назначением переменной?
... Результат отправки любого из них одинаков. Однако, это сделка ... Вы можете сохранить выводкоманды в переменной и в то же время выводит это на экран. Это то же самое, что делает Out-Variable, тогда как назначение переменной не выводит. Тем не менее, это возможно, если вы используете сжатие переменной. Итак, это ...
Get-ChildItem -OutVariable files
... this ...
($files = Get-ChildItem)
... сделает то же самое. Присвойте результаты переменной и выведите ее на экран одновременно.
Смотрите это --- 3 путиs для хранения и отображения переменной PowerShell одновременно
Использование параметра -OutVariable
Сжатие переменной PowerShell с использованием
Командлет Tee-Object
Наконец, избегайте использования Write-Host, если вы не делаете раскраску текста на экране.PowerShell будет выводить на экран по умолчанию, если вы не укажете обратное.Итак, этот
Write-Host $cert.Thumbprint
Write-Host 'Hello'
... и этот ...
$cert.Thumbprint
'Hello'
... будут делать то же самое.
Если вы должны использовать Write- *,из-за выбранной вами практики кодирования, затем выберите Write-Output.
Обновление для Андрея Одегова точка / указатель
Да, они просто выводят приветна экран.Попытайся.
Write-Host 'hello'
# results
hello
'Hello'
# results
Hello
Что касается вашей ссылки ...
Является ли ваше последнее утверждение, что Write-Host "Hello" и "Hello" делают одно и то же, верно?Посмотрите на stackoverflow.com/questions/8755497/…
... все они делают одно и то же.Вывод на экран.
$count = 5
write-host "count=" + $count
# results
count= + 5
write-host "count = $count"
# results
count = 5
"count = $count"
# results
count = 5
"count=" + $count
# Results
count=5
Это первое, почему конкатенация строк может иметь проблемы.Я не единственный, кто так думает.См. Это видео.
От авторов большой книги «Собрание PowerShell»
Не объединяйте строки
https://devops -коллектив-inc.gitbook.io/the-big-book-of-powershell-gotchas
https://www.youtube.com/results?search_query=don%27t+concatenate+string