DJ Mogarych
20-09-2019, 21:49
Уважаемые товарищи, объясните мне, пожалуйста, одну вещь.
Вот есть какие-то данные, к примеру, список процессов, я их помещаю в переменную:
$src = get-process |select name,product,ProductVersion |? product -match "операционная система"
Результат:
Name Product ProductVersion
---- ------- --------------
explorer Операционная система Microsoft® Windows® 10.0.17763.769
smartscreen Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
SystemSettings Операционная система Microsoft® Windows® 10.0.17763.769
taskhostw Операционная система Microsoft® Windows® 10.0.17763.769
Дальше я беру и создаю переменную из куска предыдущих данных:
$piece = $src |? name -match smart
Результат:
Name Product ProductVersion
---- ------- --------------
smartscreen Операционная система Microsoft® Windows® 10.0.17763.769
Теперь я беру и меняю имя в этом куске:
$piece.name = "Умный экран"
Результат:
Name Product ProductVersion
---- ------- --------------
Умный экран Операционная система Microsoft® Windows® 10.0.17763.769
Теперь самое удивительное - если вывести содержимое первой переменной, где содержатся все данные, то имя из того куска, который вычленили, тоже будет изменено:
$src
Результат:
Name Product ProductVersion
---- ------- --------------
explorer Операционная система Microsoft® Windows® 10.0.17763.769
Умный экран Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
SystemSettings Операционная система Microsoft® Windows® 10.0.17763.769
taskhostw Операционная система Microsoft® Windows® 10.0.17763.769
Это очень удобно - можно, к примеру, менять загруженный в память CSV построчно по определённой выборке, но я не понимаю, почему, изменяя один объект, по идее, являющийся отдельным, меняется другой.
Кто-нибудь знаком с этим механизмом?
Вот есть какие-то данные, к примеру, список процессов, я их помещаю в переменную:
$src = get-process |select name,product,ProductVersion |? product -match "операционная система"
Результат:
Name Product ProductVersion
---- ------- --------------
explorer Операционная система Microsoft® Windows® 10.0.17763.769
smartscreen Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
SystemSettings Операционная система Microsoft® Windows® 10.0.17763.769
taskhostw Операционная система Microsoft® Windows® 10.0.17763.769
Дальше я беру и создаю переменную из куска предыдущих данных:
$piece = $src |? name -match smart
Результат:
Name Product ProductVersion
---- ------- --------------
smartscreen Операционная система Microsoft® Windows® 10.0.17763.769
Теперь я беру и меняю имя в этом куске:
$piece.name = "Умный экран"
Результат:
Name Product ProductVersion
---- ------- --------------
Умный экран Операционная система Microsoft® Windows® 10.0.17763.769
Теперь самое удивительное - если вывести содержимое первой переменной, где содержатся все данные, то имя из того куска, который вычленили, тоже будет изменено:
$src
Результат:
Name Product ProductVersion
---- ------- --------------
explorer Операционная система Microsoft® Windows® 10.0.17763.769
Умный экран Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
svchost Операционная система Microsoft® Windows® 10.0.17763.769
SystemSettings Операционная система Microsoft® Windows® 10.0.17763.769
taskhostw Операционная система Microsoft® Windows® 10.0.17763.769
Это очень удобно - можно, к примеру, менять загруженный в память CSV построчно по определённой выборке, но я не понимаю, почему, изменяя один объект, по идее, являющийся отдельным, меняется другой.
Кто-нибудь знаком с этим механизмом?