【发布时间】:2016-07-03 10:54:03
【问题描述】:
我来自 C、C++、C#、python 背景,所以我将这种思维模式应用于我正在从头开始学习的 Powershell,但我有点困惑,乍一看似乎不一致并且不遵循所有对象的固定基类类型结构,以便可以以一致的方式查询事物。
以下工作正常:
$主机 |获取成员 $env:用户名所以 $env 是一个有效的对象,但这不起作用:
$env |获取会员
这些也不起作用:
$env.gettype() 目录 $env 目录 $env:但是 $host 上的这种类型查询确实如此,所以我假设 $host 是一个 .net 变量但 $env 不是?
$host.gettype()
我发现 env: 也适用于 dir(又名 get-childitem),但这个冒号是我不熟悉的另一种表示法,现在事情开始变得非常混乱。在这种情况下,这似乎不是字符串格式,我已经看过一些谷歌帖子,所以它是什么?它的行为类似于成员选择或字典键说明符。如果它是成员选择器或字典键,那么我希望 get-member 能够工作,因为它是一个标准对象。
这会输出我想要的变量和值,但我不明白为什么要使用这种语法。这也不是 DOS 语法,这是怎么回事?
目录环境:
但是 dir $env 似乎等同于 dir $env:userprofile????为什么?
因此 $host 似乎是一个 .net 对象,但 $env 或 env: 是完全不同的东西,我不知道它在总体方案中是什么对象类型,并且似乎无法通过 by 查询它的类型常规手段。最初的想法是它是一个列表对象,因为 get-childitem 可以使用它,但除此之外我完全迷路了。
我显然在这里遗漏了一些东西,所以有人可以引导我朝着正确的方向前进吗?
【问题讨论】:
-
因为你没有
$env变量。$env和$env:something是两个不同的不相关的东西。 -
好的,正如我上面写的,如果 $env 不是变量,它是什么?似乎 env: 实际上是一个驱动器,但 $env 和 $env:username 是别的东西,我仍然不确定那是什么。
-
$env是变量,但你没有变量,因为你没有给它赋值,比如$env = 'something'。$env:username等效于Get-Content env:username,其中env:username是 PowerShell 提供程序项的 PowerShell 路径。它适用于任何实现内容 cmdlet 的提供程序:${C:\Windows\System.ini}或$function:prompt。 -
啊,好吧,我明白你在说什么,但我觉得令人困惑的是 $env 在我的情况下确实没有设置任何东西,但 $env:username 确实有效。我很困惑,因为对我来说,它在逻辑上读作“env 变量的用户名属性”。知道 $env:username = ${env:username} = get-content env:username 很方便,因此感谢您的提醒。就我个人而言,我会说 $env:username 不应该被允许作为有效的语法,以免它与变量名混淆。不过感谢您的澄清。 :-)
标签: powershell