PowerShell—缩短名称空间名称,使其';它更容易访问类型

PowerShell—缩短名称空间名称,使其';它更容易访问类型,powershell,namespaces,Powershell,Namespaces,是否有缩短PowerShell命名空间引用的方法 键入[RootNameSpace1.NameSpace2.Namepsace3+SomeEnum]::SomeValue很费劲,不是一个很好的用户体验。我意识到您可以引用没有名称空间的系统级别对象,这样[Type]::GetType(…可以工作。是否可以创建一些清单或使用一些命令来缩短冗长的名称空间?冗长的类型可以分配给变量,然后通过这些变量使用: # enum values $rvk = [Microsoft.Win32.RegistryVal

是否有缩短PowerShell命名空间引用的方法


键入
[RootNameSpace1.NameSpace2.Namepsace3+SomeEnum]::SomeValue
很费劲,不是一个很好的用户体验。我意识到您可以引用没有名称空间的
系统
级别对象,这样
[Type]::GetType(…
可以工作。是否可以创建一些清单或使用一些命令来缩短冗长的名称空间?

冗长的类型可以分配给变量,然后通过这些变量使用:

# enum values
$rvk = [Microsoft.Win32.RegistryValueKind]
$rvk::Binary
$rvk::DWord

# static members
$con = [System.Console]
$con::CursorLeft
$con::WriteLine('Hello there')

# just to be sure, look at types
.{
    $rvk::Binary
    $con::WriteLine
    $con::CursorLeft
} |
% { $_.GetType() }

任何接受枚举的方法都将接受字符串,但这仅适用于枚举,并且不存在歧义(这意味着没有其他重载以这种方式使用与字符串匹配的签名)

如果您使用的是powershell v2.0,您可以(ab)使用类型加速器。我之前在博客上写过这方面的内容,Joel Bennett将我的技术总结在一个方便的脚本中:

更新(2020):此链接已断开,但对于当前版本的powershell,有一种更简单的方法

使用名称空间System.Collections.Generic;
$list=新对象列表#另外:$list=[list]::new()

-Oisin

这是一个简单的解决方案。我希望有一种方法可以实现它,而无需我们的最终用户创建这些变量,也无需在内部创建变量,然后公开某种文档。谢谢!这正是我想要的。谢谢您提供的链接(不再)可访问。您能否将答案的相关部分添加到答案中,这样就可以在没有外部依赖的情况下获得答案?如果有人想查看原始答案,请访问archive.org-