为什么我不能转换为[PSSession]声明函数参数?

时间:2016-09-30 17:11:55

标签: powershell powershell-v4.0 type-accelerators

我无法弄清楚如何正确地投射PSSession以用作函数中的参数。

我是否需要装载组件或其他东西?我正在使用Powershell v4。

我喜欢投射我的函数参数以确保正确使用。我正在尝试的是:

function Some-Remote-Task([PSSession] $Session, [String]$Target) {
  # Do stuff...
}

但是我在投射参数时遇到了这个错误:

Unable to find type [PSSession]. Make sure that the assembly that contains this type is loaded.

此外,在有效会话中使用$mySession.GetType()会产生以下结果:

IsPublic IsSerial Name                                     BaseType                                                                                                                           
-------- -------- ----                                     --------                                                                                                                           
True     False    PSSession                                System.Object    

所以看起来应该是正确的类型名称......

感谢所有帮助。

2 个答案:

答案 0 :(得分:8)

试试这个:

function Some-Remote-Task([System.Management.Automation.Runspaces.PSSession]$Session, [String]$Target) {
  # Do stuff...
}

答案 1 :(得分:0)

编辑:

我现在可以正确使用[PSSession]

结合来自biantist评论中链接的信息:Type Accelerator

这里有另一个答案:Simplify Your Script...

我正确添加了类型加速器

PS c:\> [PowerShell].Assembly.GetType("System.Management.Automation.TypeAccelerators")::add(“PSSession”,”System.Management.Automation.Runspaces.PSSession”)

PS c:\> [PSSession]

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    PSSession                                System.Object

WAS:

最后我使用了别名。发布给其他喜欢干净外观的人。

New-Alias PSSession System.Management.Automation.Runspaces.PSSession

-ErrorAction SilentlyContinue如果您不断重新运行相同的代码段,在测试期间添加它是有用的。