2016-08-04 6 views
1

Я хотел бы определить функцию в 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 Любые советы, чтобы сделать что-то вроде этого? Thanks

+0

Это то, чего я стараюсь избегать. Я создаю много пробелов и не хочу реализовывать функцию больше, чем однажды. – Vik

ответ

0

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

$initialSessionState = [InitialSessionState]::CreateDefault() 

Chris

Edit: Добавлен пример.

+0

Thats it. Он работает с CreateDefault. Благодаря! – Vik