*.psd1
файлы содержат PowerShell хеш-таблица литералы и поэтому требуют такой же синтаксис , как при определении таких литералов в коде :
Поэтому, если вы хотите создать запись с ключом path
, содержащую строковый литерал ./python/buildzig.py
(или ./powershell/msterminal.ps1
), вы должны заключить в кавычки это - либо Форма в порядке здесь:
path = '.\powershell\msterminal.ps1'
path = ".\powershell\msterminal.ps1"
Однако, учитывая, что в контексте файла *.psd1
вы фактически ограничены литеральными значениями, использование '...'
(одинарные кавычки) имеет больше смысла (см. about_Quoting_Rules *) 1036 *).
Что касается , что вы пытались :
Запись хеш-таблицы, такая как path = ./python/buildzig.py
, пытается создать запись с ключом path
и значением, которое является результатом выполнения file ./python/buildzig.py
, потому что - при отсутствии цитирование - токен интерпретируется как команда (см. about_Parsing , чтобы узнать, как PowerShell анализирует команды и выражения).
- к сожалению, смутное - сообщение об ошибке, которое вы видели (Cannot generate a PowerShell object for a ScriptBlock evaluating dynamic expressions.
), проистекает из того факта, что по соображениям безопасности, выполнение команд не разрешено в *.psd1
файлах , которые (в основном *) 1063 * [1] ) ограничено определением литералов значений.
[1] Вы можете использовать следующие «переменные», которые в действительности являются константами : $true
, $false
, $null
. Кроме того, в зависимости от назначения файла *.psd1
допускается выбор нескольких дополнительных автоматических переменных: $PSCulture
и $PSUICulture
, за исключением файлов, которые должны быть прочитаны с помощью Import-PowerShellDataFile
, и, кроме того, $PSScriptRoot
, $PSEdition
и $EnabledExperimentalFeatures
в модульных манифестах - см. about_Language_Modes .