Как определить функцию в среде выполнения Powershell и выполнить ее

Я хотел бы определить функцию в powershell и выполнить ее в другом пространстве выполнения. Я пробовал это:

Function Add-Message {
    param(
    [parameter(mandatory=$true)][String]$pMessage
    )   
    ("--$pMessage--") | Out-File -FilePath "D:\Temp\test.log" -Append           
}

$initialSessionState = [System.Management.Automation.Runspaces.InitialSessionState]::Create()
$definition = Get-Content Function:\Add-Message -ErrorAction Stop   
$addMessageSessionStateFunction = New-Object System.Management.Automation.Runspaces.SessionStateFunctionEntry -ArgumentList 'Add-Message', $definition
$initialSessionState.Commands.Add($addMessageSessionStateFunction)

$newRunspace = [runspacefactory]::CreateRunspace($initialSessionState)
$newRunspace.ThreadOptions = "ReuseThread"  
$newRunspace.Open()
$newPowershell = [PowerShell]::Create()
$newPowershell.AddScript({  
    Add-Message -pMessage "New runspace"
}) | Out-Null
$newPowershell.Runspace = $newRunspace
$newPowershell.BeginInvoke() | Out-Null

Сообщение «Новое пространство выполнения» не появляется в файле test.log. Есть ли совет сделать что-то подобное? Спасибо


person Vik    schedule 04.08.2016    source источник
comment
Это то, чего я стараюсь избегать. Я создаю много пространств выполнения и не хочу реализовывать функцию более одного раза.   -  person Vik    schedule 04.08.2016


Ответы (1)


Используйте метод CreateDefault вместо Create при создании начального состояния сеанса. Если у вас нет, вам нужно настроить гораздо больше, чтобы сделать это состояние сеанса жизнеспособным.

$initialSessionState = [InitialSessionState]::CreateDefault()

Крис

Изменить: добавлен пример.

person Chris Dent    schedule 04.08.2016