2014-12-31 7 views
2

Так что я нашел странное поведение:
У меня есть импортированный файл CSV с этими названиями:переменной Powershell заверяет объект CSV

$connections | Get-Member 
Name    MemberType Definition 
----    ---------- ---------- 
Equals    Method  bool Equals(System.Object obj) 
GetHashCode   Method  int GetHashCode() 
GetType    Method  type GetType() 
ToString   Method  string ToString() 
Access Method  NoteProperty System.String Access Method=SSH 
Accessable   NoteProperty System.String Accessable=N/A 
Application   NoteProperty System.String Application=Test 
Authentication type NoteProperty System.String Authentication type=rsa 
Node    NoteProperty System.String Node=ComputerName 
Port    NoteProperty System.String Port=22 
User    NoteProperty System.String User=User 

Теперь, если я сделаю новую переменное из одной строки

$x = $connections[0] 

Тогда-то изменить в $ х

$x.Accessable = $true 

изменение будет быть видимым в $ соединениях [0].

$connections[0].Accessable 
True 

Это нормальное поведение? Если да, то как я могу создать новую переменную с похожим объектом, как эта строка?

Редактировать: Powershell array assignment assigns variable, not value? о массивах или многомерных массивах, этот вопрос касается передачи объекта (копии). В этом случае простые ответы на этой странице не работают. Проблема все еще происходит.

+0

Не полностью дублировать IMO. Частью вопроса «как бороться с этим конкретным объектом» не ответил. – PetSerAl

+0

Это дубликат, потому что речь идет о копировании по ссылке. У этого дубликата есть решение. Хотя этот вопрос также содержит альтернативу. – JasonMArcher

ответ

2

Да, это нормальное поведение, так как работают ссылочные типы. Вам необходимо скопировать объект:

$x = $connections[0].PSObject.Copy() 
+0

Работает нормально, еще один вопрос ты. Как это реализовать, если я хотел бы использовать объект Where-Object в объекте $ connections? Пример: $ x = $ соединения | Where-Object {$ _. Application -eq "Test"} – Tumpi

+0

Вы хотите, чтобы вы хотели изменить объекты внутри cmdlet Where-Object, или хотите просто отфильтровать их в Where-Object и изменить их последним? – PetSerAl

+0

Фильтр, чем позже. – Tumpi