我来自C,C ++,C#,python背景,所以我将这个思维模式应用到Powershell,我正在从头学习但是我有点困惑,因为乍一看似乎是不一致的并且不遵循所有对象的固定基类类型结构,以便可以以一致的方式查询事物。
以下工作正常:
$host | get-member $env:username
所以$ env是一个有效的对象,但这不起作用:
$env | get-member
这些也行不通:
$env.gettype() dir $env dir $env:
但$ host上的这种类型查询确实如此我假设$ host是一个.net变量但$ env不是?
$host.gettype()
我发现env:也适用于dir(又名get-childitem),但是这个冒号是另一种我不熟悉的符号,现在事情开始变得非常混乱。在这种情况下,这似乎不是一个字符串格式,我已经看到一些谷歌帖子,所以这是什么?它的行为类似于成员选择或字典键说明符。如果它是成员选择器或字典键,那么我希望get-member能够工作,因为它是一个标准对象。
这会输出我想要的变量和值,但我不明白为什么使用这种语法。这不是DOS语法,所以这里发生了什么?
dir env:
但是dir $ env似乎等同于dir $ env:userprofile ????为什么呢?
因此$ host似乎是一个.net对象,但$ env或env:是完全不同的东西,我不知道它在宏观方案中的对象类型是什么,似乎无法查询它的类型传统手段。最初的想法是它是一个列表对象,因为get-childitem可以使用它,但除此之外我完全迷失了。
我显然在这里遗漏了一些东西,所以有人可以引导我朝着正确的方向前进吗?
答案 0 :(得分:3)
Get-Help 'about_Providers' -ShowWindow
在Environment Provider中显示env:
驱动,即Windows PowerShell providers中的一个。
内置提供程序:Windows PowerShell包含一组内置功能 您可以用来访问不同类型数据的提供程序 存储
Provider Drive Data store -------- ----- ---------- Alias Alias: Windows PowerShell aliases Certificate Cert: x509 certificates for digital signatures Environment Env: Windows environment variables FileSystem * File system drives, directories, and files Function Function: Windows PowerShell functions Registry HKLM:, HKCU: Windows registry Variable Variable: Windows PowerShell variables WSMan WSMan: WS-Management configuration information * The FileSystem drives vary on each system.
您也可以创建自己的Windows PowerShell提供程序 安装其他人开发的提供商。列出提供者 在会话中提供,请输入:
get-psprovider
。
这就是Get-ChildItem env:
与 ,dir $env:
等相反的原因。dir $env
答案 1 :(得分:3)
首先要注意的是,$env
和$env:username
无关。 $env
只是一个变量,通常它不存在,因为没有人给它任何东西。在变量名中使用冒号(如$env:username
,但某些预定义前缀除外:global:
,script:
,local:
,private:
和variable:
)是一种特殊语法,允许使用可变语法访问PowerShell提供程序项内容。它适用于实现内容cmdlet的任何PowerShell提供程序:${C:\Windows\System.ini}
或$function:prompt
。该语法等同于为给定的PowerShell路径调用Get-Content
或Set-Content
。
答案 2 :(得分:1)
我的2美分:
试试get-psdrive
,你会得到类似的结果:
Name Used (GB) Free (GB) Provider Root
Env Environment
所以它似乎就像批量驱动程序一样。