Переменная Powershell объявляет объект CSV

Поэтому я обнаружил странное поведение: У меня есть импортированный 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

$x.Accessable = $true

Это изменение будет видно в $ connections [0].

$connections[0].Accessable
True

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

Изменение: Назначение массива Powershell присваивает переменную, а не значение? это о массивах или многомерных массивах, этот вопрос касается передачи объекта (копии). В этом случае простые ответы на этой странице не работают. Проблема все еще происходит.

1 ответ

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

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

licensed under cc by-sa 3.0 with attribution.