Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在powershell中键入完全限定的类型名?_Powershell_Namespaces - Fatal编程技术网

在powershell中键入完全限定的类型名?

在powershell中键入完全限定的类型名?,powershell,namespaces,Powershell,Namespaces,例如,我想减少键入System和其他根命名空间 [string] $ComputerName = [Environment]::MachineName vs 另一个例子: [Net.Dns]::GetHostEntry("192.168.1.1") vs 当键入System并且需要类似的父命名空间时,是否有任何原因和具体情况 我经常想知道为什么会有System名称空间,因为所有东西都在该名称空间内,那么该名称空间怎么处理呢?这是胡说八道;系统这个术语到底是什么意思?这与这里的操作系统无关。但

例如,我想减少键入
System
和其他根命名空间

[string] $ComputerName = [Environment]::MachineName
vs

另一个例子:

[Net.Dns]::GetHostEntry("192.168.1.1")
vs

当键入
System
并且需要类似的父命名空间时,是否有任何原因和具体情况

我经常想知道为什么会有
System
名称空间,因为所有东西都在该名称空间内,那么该名称空间怎么处理呢?这是胡说八道;
系统
这个术语到底是什么意思?这与这里的操作系统无关。但是对于网络框架中的一切


我假设调用静态方法时可能会出现异常,但我不知道C,所以我自己无法回答这个问题。

顺序有些混乱:

这是胡说八道;
系统
这个术语到底是什么意思

讨论中的“系统”是.NET运行时和框架。据我所知,最初的想法是,不随.NET一起提供的代码将属于不同的名称空间-但多个Microsoft编写的组件构建在.NET之上,此后使用了
System
parent名称空间-包括组成PowerShell本身的所有API

我经常想知道为什么会有[a]
System
名称空间,因为所有东西都在该名称空间内,那么该名称空间怎么处理呢

并非“一切”都在
系统
命名空间中,但如上所述,运行时或基类库附带的一切都是-这正是为什么PowerShell会自动解析类型文本,即使您省略了
系统。
从限定的类型名中-PowerShell正在尝试帮助您减少键入

当需要键入System和类似的父命名空间时,是否有任何原因和具体情况

是-当父命名空间不是
System

想到的第一个示例是Windows上Win32注册表API的.NET包装类:

$HKLM = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Default)

现在,关于实际问题:

我想减少键入
System
和其他根命名空间

您不能向PowerShell的名称解析方法添加自定义名称空间前缀(如
System
),但您可以在PowerShell 5及更高版本中声明特定名称空间中类型名称的自动解析,并使用

不使用命名空间
:
通过
使用命名空间
: 在脚本中使用时,任何使用
指令的
都必须位于文件中任何其他指令之前,包括
param

使用namespace
指令也可以在交互式会话中使用,前提是您将其作为单独的语句发出:

PS> using namespace System.Net 
PS> [Dns] # still works!

顺便说一句,powershell有很多像[datetime]这样的“类型加速器”,你能自己做一个吗,像[dt]:

你比我做得好,而且放得很好!(+ 1)我看到了,所以<代码>系统实际上与C++中的代码> STD 相同。因此,在powershell中,避开系统几乎总是安全的?@metablaster,除了它不太可比之外-省略
System
仅在powershell中有效,因为当您从类型名中省略它时,它会故意(悄悄地)为您添加它,而类型名的命名空间尚未解析谢谢,这是我自己问题的链接,但我发布了一个新的链接,因为这是特定于网络名称空间的。PowerShell非常棒,我显然在学习基础知识:)正如“Mathias R.Jessen”所说的,如果不使用完整的名称空间,当点引用[System]根目录下的内容时,您将失去智能感知,从而迫使您事先已经记住了[System]的子对象。谁对所有这些都有照片/真实的记忆?因此,即使使用了“using namespace System.Net”,您也不必键入[System],但您仍然需要知道要使用什么,这意味着使用[System.]找到它,然后在后面使用缩写。所以,没有真正的逃避它100%的使用。智能感知,呃,伙计,现在我明白为什么它有时不起作用了!谢谢你的提醒。不用担心,我想这也是你开车的目的之一。不久前我有了这个自我发现。
$HKLM = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Default)
[System.Net.Dns]::GetHostEntry("192.168.1.1")
using namespace System.Net

[Dns]::GetHostEntry("192.168.1.1")
PS> using namespace System.Net 
PS> [Dns] # still works!