Powershell 3克隆一个对象有意外的结果 - 影响其他对象

标签 powershell powershell-2.0 powershell-3.0 import-csv

这个问题在这里已经有了答案:





PowerShell copy an array completely

(5 个回答)


4年前关闭。




我正在编写的代码示例有问题。这是一个简单的问题,但这是一个需要一些时间的问题,而我没有。我已经尝试过 stackoverflow 相关问题和搜索,但没有找到任何有帮助的东西。

我有以下代码:

#Importing some file from a csv to a variable
$output = import-csv -LiteralPath ...some file imports OK

##
#Copy the layout of the csv imported for further processing..
##
$extraOut = $output.clone() 
$extraOut | ForEach-Object {
$_.innerlinks1 = ""
$_.innerlinksurl1 = ""
}

当我尝试打印出 $output 的值时,通过使用 $_ 我得到了我之前分配的空字符串(我不想要)。为什么会这样?
#Trying to print out $output should have data and not empty strings.
$output | ForEach-Object { Write-Host $_ }

任何允许复制 Import-csv 结果结构(有或没有 PSObject 克隆)的帮助或代码也会很棒。

注意:在找到有用的答案后,我还认为问题需要更详细的脚本,因为我的文件中有很多空字符串,将来可能会导致其他问题。

最佳答案

我使用 this link 中的答案每当我需要深度复制一个数组时。引用原始答案:

# Get original data
$data = Import-Csv ...

# Serialize and Deserialize data using BinaryFormatter
$ms = New-Object System.IO.MemoryStream
$bf = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
$bf.Serialize($ms, $data)
$ms.Position = 0
$data2 = $bf.Deserialize($ms)
$ms.Close()

# Use deep copied data
$data2

关于Powershell 3克隆一个对象有意外的结果 - 影响其他对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44716896/

相关文章:

Powershell Hyper-V 脚本不起作用? + 自动安装 Windows

powershell - 如何在 Powershell 中将字符串保存为原始数据?

powershell - 喜欢不同 Powershell 版本上的行为

powershell - 将脚本部署到目标环境后,如何保证不被修改?

iis - 在 PowerShell 中显示所有站点和绑定(bind)

powershell - Powershell 3.0 中的与号行为是否发生了变化?

python - 将唯一指纹附加到文件

azure - 正在寻找 Intune/Microsoft Graph 的 POwershell 脚本来提取上次用户登录信息,字段似乎不存在

powershell - Sql 命令(使用 "ExecuteScalar"参数调用 "0"时出现异常)

c# - 我们可以在 PowerShell 脚本中实现 .NET 接口(interface)吗?