2016-08-04 112 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中 任何意见,做这样的事情? 谢谢

+0

这是我试图避免的。我创建了很多运行空间,并且不想多执行一次该功能。 – Vik

回答

0

当您创建初始会话状态时,请使用CreateDefault方法而不是Create。如果你没有更多的配置来使会话状态可行。

$initialSessionState = [InitialSessionState]::CreateDefault() 

克里斯

编辑:添加了一个例子。

+0

就是这样。它适用于CreateDefault。谢谢! – Vik

相关问题