首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以向标准的PowerShell类型添加静态重载吗?

我可以向标准的PowerShell类型添加静态重载吗?
EN

Stack Overflow用户
提问于 2021-11-14 00:51:39
回答 1查看 33关注 0票数 0

我正在尝试为我的最新脚本配置一个运行空间池。我想把一些函数传递给这个运行空间池。我在this link中找到了一种潜在的方法来实现这一点

代码语言:javascript
复制
#Sample function pass to runspace pool (copied from link)

Function ConvertTo-Hex {

    Param([int]$Number)

    ‘0x{0:x}’ -f $Number

}

#Get body of function

$Definition = Get-Content Function:\ConvertTo-Hex -ErrorAction Stop

#Create a sessionstate function entry

$SessionStateFunction = New-Object System.Management.Automation.Runspaces.SessionStateFunctionEntry
-ArgumentList ‘ConvertTo-Hex’, $Definition

#Create a SessionStateFunction

$InitialSessionState.Commands.Add($SessionStateFunction)

 #Create the runspacepool by adding the sessionstate with the custom function

$RunspacePool = [runspacefactory]::CreateRunspacePool(1,5,$InitialSessionState,$Host)

接下来,我为CreateRunspacePool方法准备了一个$initialSessionSate

问题是我不得不添加$Host,因为CreateRunspacePool方法没有包含( <min runspaces>, <max runspaces>, <initial session state> )的构造函数的重载

代码语言:javascript
复制
PS>([runspacefactory] | gm -Force -Static | select -ExpandProperty definition | sls createrunspacepool`(`) ) -replace '\),',")`n"

static System.Management.Automation.Runspaces.RunspacePool CreateRunspacePool()
 static System.Management.Automation.Runspaces.RunspacePool CreateRunspacePool(int minRunspaces, int maxRunspaces)
 static System.Management.Automation.Runspaces.RunspacePool CreateRunspacePool(initialsessionstate initialSessionState)
 static System.Management.Automation.Runspaces.RunspacePool CreateRunspacePool(int minRunspaces, int maxRunspaces, System.Management.Automation.Host.PSHost host)
 static System.Management.Automation.Runspaces.RunspacePool CreateRunspacePool(int minRunspaces, int maxRunspaces, initialsessionstate initialSessionState, System.Management.Automation.Host.PSHost host)
 static System.Management.Automation.Runspaces.RunspacePool CreateRunspacePool(int minRunspaces, int maxRunspaces, System.Management.Automation.Runspaces.RunspaceConnectionInfo connectionInfo)
 static System.Management.Automation.Runspaces.RunspacePool CreateRunspacePool(int minRunspaces, int maxRunspaces, System.Management.Automation.Runspaces.RunspaceConnectionInfo connectionInfo, System.Management.Automation.Host.PSHost host)
 static System.Management.Automation.Runspaces.RunspacePool CreateRunspacePool(int minRunspaces, int maxRunspaces, System.Management.Automation.Runspaces.RunspaceConnectionInfo connectionInfo, System.Management.Automation.Host.PSHost host, System.Management.Automation.Runspaces.TypeTable typeTable)
 static System.Management.Automation.Runspaces.RunspacePool CreateRunspacePool(int minRunspaces, int maxRunspaces, System.Management.Automation.Runspaces.RunspaceConnectionInfo connectionInfo, System.Management.Automation.Host.PSHost host, System.Management.Automation.Runspaces.TypeTable typeTable, psprimitivedictionary applicationArguments)

但是,当我包含$Host (通过Get-Host)时,运行空间是在无语言模式下启动的,这是我不想要的。首先,根据微软的文档,我认为无语言模式排除了在我的运行空间中使用AddScript,但目前它给了我以下语法错误:

如果我回到最小/最大运行空间重载,并在scriptblock中定义我的所有函数,这个错误就会消失。

根据谷歌的说法,当我实例化一个运行空间来覆盖这种行为时,似乎不可能显式地设置语言模式,所以我的目标是避免提供$Host。

问题

有人知道我是否以及如何将自己的构造函数添加到不包含$Host的CreateRunspacePool方法中吗?或者用其他方式来实现我的目标?

如果与之相关,我的PowerShell在FullLanguage模式下运行:

代码语言:javascript
复制
PS>$ExecutionContext.SessionState.LanguageMode
FullLanguage

PS(5.1.19041)

Edit1:添加了无语言模式的错误图片和更多上下文。

EN

回答 1

Stack Overflow用户

发布于 2021-11-14 14:21:58

问题是我不得不添加$Host,因为CreateRunspacePool方法没有包含( <min runspaces>, <max runspaces>, <initial session state> )的构造函数的重载:

幸运的是,最小和最大运行空间数量在实例化后是可配置的,因此您可以这样做:

代码语言:javascript
复制
# Create runspace with desired initial session state
$RunspacePool = [runspacefactory]::CreateRunspacePool($initialsessionstate)

# Set MaxRunspace count after the fact, MinRunspace count defaults to 1
$RunspacePool.SetMaxRunspaces(5)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69959454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档