2014-09-25 162 views
0

如何查看Powershell中变量引用的基础对象的内存地址?获取Powershell变量的内存地址

在C#中我可以这样做以下,但不知道怎么做相当于在PowerShell中

int i; 
int* pi = &i; 

这样做的原因是因为这个例子给取决于脚本块是不同的结果如下点源或使用呼叫运营商。变量名称是相同的,当点源时,更新的值在脚本块退出后保持不变。这让我想知道,当点源实现使用原始变量时,调用操作符实现是否可以在变量的副本上工作。

PS C:\> $n = 1;&{$n = 2};$n 
1 
PS C:\> $n = 1;.{$n = 2};$n 
2 

如果我可以做这样的事情,可能帮助我明白发生了什么......

PS C:\> $n = 1;&{$n.GetMemoryAddress()}; 
########## 
PS C:\> $n = 1;.{$n.GetMemoryAddress()}; 
########## 
+1

你打算怎样处理一个shell变量的内存地址? – 2014-09-25 11:08:11

+0

我在试图理解事情是如何工作的......我想看看在脚本块内使用的变量是否指向同一个对象或其副本。我试图理解点源脚本块与在脚本块上使用调用运算符的实现影响。 :) – samaspin 2014-09-25 11:20:12

+0

那么你想要的是获得*对象的地址*而不是*变量*? – 2014-09-25 11:21:27

回答

0

如果您真正问题是找出是否一个对象被引擎盖下被复制,也许你不需要看看它的地址。要找出两个对象是否完全相同的情况下,你可以只使用Object.ReferenceEquals

[System.Object]::ReferenceEquals($a, $b) 
+0

感谢马蒂,但这不会在我的语境中工作,添加了一些我想要实现的更多细节:) – samaspin 2014-09-25 11:47:40

0

你并不需要看到的内存地址。调用操作符和点源脚本的确在不同的范围内运行。我在手机上,不能轻松为您提供链接,但运行get - help about_Scopes(或搜索相同)。