У меня есть некоторые функции в модуле, который я хотел бы вызвать из рабочего пространства, но он не работает. Я предполагаю, что мне как-то нужно отправить модуль в пространство выполнения. Пример ниже работает нормально. $ hash = [...

2
Jomasdf 2 Мар 2021 в 01:06

1 ответ

Лучший ответ

Если вашего модуля нет в одном из каталогов, перечисленных в $env:PSModulePath (или последняя переменная среды не определена, что может произойти в Unix, если вы размещаете PowerShell SDK во внешнем исполняемом файле), вы должны импортировать его явно :

$yourFullModulePath = '<your-full-module-path-here>'

# Create a default session state and import a module into it.
$iss = [InitialSessionState]::CreateDefault()
$iss.ImportPSModule($yourFullModulePath)

# Create the runspace with the initial session state and open it.
$runspace = [runspacefactory]::CreateRunspace($iss)
$runspace.Open()

# Create a PowerShell instance and assign the runspace to it.
$powershell = [powershell]::Create($runspace)

# ...

Обратите внимание, что вы можете упростить свой код, воспользовавшись тем фактом, что экземпляр [powershell] автоматически создает пространство выполнения:

# Pass the initial session state directly to [powershell]::Create(),
# which automatically provides a runspace.
$powershell = [powershell]::Create($iss)

# Access the [powershell] instance's runspace via the `.Runspace` property.
$powerShell.Runspace.SessionStateProxy.SetVariable('Hash', $hash)

# ...
3
mklement0 1 Мар 2021 в 22:33