Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/14.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 - Fatal编程技术网

如何使powershell使用对象引用添加成员?

如何使powershell使用对象引用添加成员?,powershell,Powershell,我在添加成员和引用方面遇到了一些问题。它们不在一起工作:-( 守则: function ObjPropAdd([ref]$obj, $name, $value) { # Failed: object reference does not work $obj | Add-Member –MemberType NoteProperty –Name $name –Value $value } function ObjPropRemove([ref]$obj, $name) {

我在添加成员和引用方面遇到了一些问题。它们不在一起工作:-(

守则:

function ObjPropAdd([ref]$obj, $name, $value)
{
    # Failed: object reference does not work
    $obj | Add-Member –MemberType NoteProperty –Name $name –Value $value
}

function ObjPropRemove([ref]$obj, $name)
{
    # Success: object reference is work
    $obj.value.PSObject.Properties.Remove($name)
}

$obj = [PsCustomObject]@{ var1 = 'val1'; var2 = 'val2' }
Write-Host ($obj | ConvertTo-Json)

$obj | Add-Member –MemberType NoteProperty –Name "var3" –Value "val3" # Success: Add-Member is works
Write-Host ($obj | ConvertTo-Json)

ObjPropAdd ([ref]$obj) "var4" "val4"    # Failed: object reference does not work
Write-Host ($obj | ConvertTo-Json)

ObjPropRemove ([ref]$obj) "var1"        # Success: object reference is works
Write-Host ($obj | ConvertTo-Json)
结果:

{
    "var1":  "val1",
    "var2":  "val2"
}
{
    "var1":  "val1",
    "var2":  "val2",
    "var3":  "val3"
}
{
    "var1":  "val1",
    "var2":  "val2",
    "var3":  "val3"
}
{
    "var2":  "val2",
    "var3":  "val3"
}
我的变量
var4
丢失


谢谢。

如果您在函数中设置断点,您将看到,
$obj
不是您的对象,而是一个包装器。无论如何,显然不需要
[ref]
那么您为什么要使用它呢?是的,这确实是PSReference而不是PsCustomObject。这是reference。但无论如何,问题仍然存在:如何使用
[ref]$obj
with
Add Member
?关于原因-在大多数情况下,当我通过支持函数对对象进行操作时,我更喜欢引用而不是返回对象。不要忘记返回值-这是复制(和开销)例如,如果您进行了100万次修改,并且在每次修改中返回对象,那么您将有100万次冗余的objectcopy操作(对于小对象来说可能不是大问题,但是对于大对象来说却是大问题);-)对象始终是引用,因此不需要
[ref]
。正如您在调试器中看到的,传递的对象是
$obj.Value
注意,使用管道和调用函数正是使10000000次重复变慢的原因。我不知道。非常感谢。如果在函数中设置断点,您将看到,
$obj
不是您的对象,而是一个包装器。无论如何,显然没有必要使用
[ref]
,那么为什么要使用它呢?是的,实际上这是PSReference而不是PsCustomObject。这是参考资料。但在任何情况下,这个问题仍然有效:如何将
[ref]$obj
添加成员一起使用?关于原因-在大多数情况下,当我通过支持函数处理对象时,我更喜欢引用而不是返回对象。不要忘记返回值-这是复制(和开销)。例如,如果您进行了100万次修改,并且在每次修改中返回对象,那么您将有100万次冗余的objectcopy操作(对于小对象来说可能不是大问题,但是对于大对象来说问题很大);-)对象始终是引用,因此不需要
[ref]
。正如您在调试器中看到的,传递的对象是
$obj.Value
注意,使用管道和调用函数正是使10000000次重复变慢的原因。我不知道。非常感谢。