Powershell 检索和更改另一个对象中的对象的数据

Powershell 检索和更改另一个对象中的对象的数据,powershell,csv,object,dynamic,reference,Powershell,Csv,Object,Dynamic,Reference,通过值或引用传递:powershell 更多信息: PSVersion 5.1.19041.906 可在此处找到所有文件:[*] 我想尝试通过引用传递一个对象,变量。在这个对象中,我想传递一组包含不同其他变量/数据的信息。 有时需要通过返回$menuObjts将其返回一个变量 在“信息”段落中显示了$menuObjts和$menuObjts[“菜单”] 关于这些对象的更多信息,我试图通过gettype.fullname来了解它 备注:在这里的代码中,我使用了$global:来允许访问和更改变量,

通过值或引用传递:powershell

更多信息: PSVersion 5.1.19041.906

可在此处找到所有文件:[*]

我想尝试通过引用传递一个对象,变量。在这个对象中,我想传递一组包含不同其他变量/数据的信息。 有时需要通过返回$menuObjts将其返回一个变量

在“信息”段落中显示了$menuObjts和$menuObjts[“菜单”]

关于这些对象的更多信息,我试图通过gettype.fullname来了解它

备注:在这里的代码中,我使用了$global:来允许访问和更改变量,并且能够制作一个屏幕截图并将其用于测试目的

所以我的问题是访问$menuObjts['MENUS']中的值,这是$menuObjts的一部分,元素

感谢@Santiago Squarzon的耐心和快速反应。 其思想是从CSV文件中动态创建菜单,通过名称调用所选函数-$menus\uuu.FUNCTION(检索到的函数)。 但现在我想扩展它,并能够创建多个子菜单

有两个独立的菜单元素:

$menuObjts.MENU\U GRP -包含有关当前/活动/选定项目的信息 $menuObjts.*MENUS**|其中对象{[int]**$$\uU.MENU\u GRP**-eq。。。 -$menuObjts.MENUS:包含所有可能的菜单 因此,我通过CSV文件导入一系列菜单项。 因此,这些$MENU_u被添加到$menuObjts.menus/$menuObjts['menus'] $menus中还有其他功能,如MENU、PARENT、MENU GRP、MENU IDX、MENU OFFSET、MENU SEL类型、nrElems、函数、信息、状态、SEL、重启、停止

$menuObjts.MENUS?MENU GRP=0或$menuObjts.MENUS?MENU GRP=6 $menuObjts.MENUS?菜单偏移量=-1或$menuObjts.MENUS?菜单偏移量=12 $menuObjts.MENUS?nrElems=13或$menuObjts.MENUS?nrElems=4 $menuObjts.MENUS?-?因为我不知道如何检索底层对象及其功能/数据

因此,我的问题是如何再次检索$menuObjts.menus中$menus的每个元素。 其思想是,通过一个变量,将计算下一个变量[*]参见函数更新UOBJTINFO

所以我的问题是,我如何按类型查看,如何获取所需的数据

变量信息/对象获取变量 gettype $menuObjts

$menuObjts.MENUS

$menuObjts.MENUS |选择-第一个1

这些都是我想要实现的一些事情,但这并不能正常工作

另一个想法…是添加方法,但我对Powershell知之甚少。 基于

信息-$menuObjts:

信息-$menuObjts.MENUS:

其他信息[2021/05/04]

我的印象是,$menus_uu被添加为$menuObjts-value:{@{MENU的“值”而不是对象=

首先,我建议大家好好阅读:,以及这篇关于

获取数组的第一个元素

获取变量$1stElementGrp的属性菜单\u OFFSET和nrElems的值_

不确定你在这里尝试什么

示例:如果要筛选MENU_OFFSET=-1的所有行

返回

示例:如果要筛选MENU_GRP=6且MENU与单词“WINDOWS”匹配的所有行

返回:

首先,我建议大家好好阅读:,以及这篇关于

获取数组的第一个元素

获取变量$1stElementGrp的属性菜单\u OFFSET和nrElems的值_

不确定你在这里尝试什么

示例:如果要筛选MENU_OFFSET=-1的所有行

返回

示例:如果要筛选MENU_GRP=6且MENU与单词“WINDOWS”匹配的所有行

返回:


如果我理解正确,您在PowerShell中筛选CSV时遇到问题,是吗?@Santiago Squarzon,我确实希望通过筛选和计算CSV文件的正确项来检索,该项已存在于常规对象中。当过滤器使用$menuObjts.MENU\U GRP=6时:$menuObjts.MENU\U OFFSET=$$menuObjts.MENU | Where对象{[int]$$\.MENU\u GRP-eq$menuObjts.MENU\u GRP}|选择-First 1。MENU_OFFSET应该返回12我很难告诉你你想要完成什么,我能告诉你的是,CSV是否用分隔符分隔;而不是,你应该使用导入CSV-分隔符;这样你的$menuObjts对象与你的CSV头具有相同的属性,这使得它更易于操作。@Santiago Squarzon,on th在屏幕截图中,您可以看到CSV数据已经加载。事实上,在powershell中,数组/哈希表…使用半列-;来分隔它们。CSV文件使用逗号-,。如果我理解正确,您在powershell中筛选CSV时遇到问题,是吗?@Santiago Squarzon,我确实希望通过筛选和畜栏
$global:menus_ = Import-Csv -Delimiter "," $($curPath)
$menuGRP_ = 0      # 0 - MAIN
$menus_.MENU
$nrRestarts = @($menus_ | Where-Object { [int]$_.RESTART -eq 1 -and [int]$_.MENU_GRP -eq 0 }).Count
write-host (" info     : - nrRestarts: {0}" -f ($nrRestarts))
# SET : values in one object : $menuObjts
$global:menuObjts =[ordered]@{
    MENUS         = $menus_;
    MENU_GRP      = $menuGRP_;
    MENU_SEL_TYPE = $null;
    MENU_OFFSET   = $null;
    nrElems       = $null;
    sel_input     = $null;
    MENU_IDX      = $null}
  $1stElementGrp_         = $($menus_ | Where { [int]$($_).MENU_GRP -eq $menuObjts.MENU_GRP }| Select -First 1 )
  $menuOFFSET_            = $($1stElementGrp_).MENU_OFFSET
  $menuNrElems_           = $($1stElementGrp_).nrElems
  #####                                         where $($menuObjts.MENUS).MENU_GRP -eq $menuObjts.MENU_GRP  -> .MENU_OFFSET
  $menuObjts.MENU_OFFSET = $($menuObjts.MENUS | Where-Object { [int]$($_).MENU_GRP -eq $menuObjts.MENU_GRP}| Select -First 1 ).MENU_OFFSET
  $menuObjts.nrElems     = @($menuObjts.MENUS | Where-Object { [int]$($_).MENU_GRP -eq $menuObjts.MENU_GRP -and [int]$($_).SEL -eq 1}).Count
$menuObjts | Add-Member -MemberType ScriptMethod -Name "getMENUS_RESTART" -Value $( this.MENUS | Where-Object { [int]$_.RESTART -eq 1 -and [int]$_.MENU_GRP -eq $menuGRP_ })
Name                           Value
----                           -----
MENUS                          {@{MENU;PARENT;MENU_GRP;MENU_IDX;MENU_OFFSET;MENU_SEL_TYPE;nrElems;FUNCTION;info;status;SEL;RESTART;STOP=typeInstallation;LICENSE;0;0;-1;0;13;f1;Windows-Defende...
MENU_GRP                       0
MENU_SEL_TYPE
MENU_OFFSET
nrElems
sel_input
MENU_IDX 
MENU;PARENT;MENU_GRP;MENU_IDX;MENU_OFFSET;MENU_SEL_TYPE;nrElems;FUNCTION;info;status;SEL;RESTART;STOP
-----------------------------------------------------------------------------------------------------
typeInstallation;LICENSE;0;0;-1;0;13;f1;Windows-Defender has to be uninstalled                       
activate;;0;1;-1;0;13;f2;Windows has to be upgraded if working with an EVALUATION prod key;-1;0;0;0  
NAME;HOST;0;2;-1;0;13;f3;F-SEC has to be configured as an isolated machine on the CSI server;-1;0;0;0
IP;;0;3;-1;0;13;f4;disable default Windows NTP service;-1;0;1;0                                      
routes;;0;4;-1;0;13;f5;disable default Windows NTP service;-1;0;0;0                                  
users;;0;5;-1;0;13;f6;disable default Windows NTP service;-1;0;0;0                                   
ANTI VIRUS;SERVICEs;0;6;-1;0;13;f7;disable default Windows NTP service;-1;0;0;0                      
NTP;;0;7;-1;0;13;f8;;-1;0;0;0                                                                        
MEINBERG;;0;8;-1;0;13;f9;;-1;0;0;0                                                                   
addPATH;postgres;0;9;-1;0;13;f10;;-1;0;0;0                                                           
check;after CSI;0;10;-1;0;13;f11;;-1;0;0;0                                                           
execute;;0;11;-1;0;13;f12;;-1;0;0;1                                                                  
quite;;0;12;-1;0;13;f13;;-1;0;0;1                                                                    
WINDOWS DEFENDER;ANTI VIRUS;6;13;12;1;4;f14;;-1;0;0;0                                                
F-SEC;;6;14;12;1;4;f15;;-1;0;0;0                                                                     
execute;;6;15;12;1;4;f16;;-1;0;0;1                                                                   
quite;;6;16;12;1;4;f17;;-1;0;0;1
PS C:\Users\Administrator> $menuObjts.MENUS | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name          MemberType   Definition
----          ----------   ----------
Equals        Method       bool Equals(System.Object obj)
GetHashCode   Method       int GetHashCode()
GetType       Method       type GetType()
ToString      Method       string ToString()
FUNCTION      NoteProperty string FUNCTION=f1
info          NoteProperty string info=Windows-Defender has to be uninstalled, before installing an other anti-virus program
MENU          NoteProperty string MENU=typeInstallation
MENU_GRP      NoteProperty string MENU_GRP=0
MENU_IDX      NoteProperty string MENU_IDX=0
MENU_OFFSET   NoteProperty string MENU_OFFSET=-1
...

PS C:\Users\Administrator> $menuObjts.MENUS 
MENU          : typeInstallation
PARENT        : LICENSE
MENU_GRP      : 0
MENU_IDX      : 0
MENU_OFFSET   : -1
MENU_SEL-TYPE :
nrElems       : 13
FUNCTION      : f1
info          : Windows-Defender has ...
status        : -1
SEL           : 0
RESTART       : 1
STOP          : 

MENU          : activate
PARENT        : 
MENU_GRP      : 0
...
PS C:\Users\Administrator> $menuObjts.MENUS.PSobject.Properties
ReferencedMemberName : Length
ConversionType       : 
MemberType           : AliasProperty
TypeNameOfValue      : System.Int32
IsSettable           : False
IsGettable           : True
Value                : 17
Name                 : Count
IsInstance           : False

MemberType      : Property
Value           : 17
IsSettable      : False
IsGettable      : True
TypeNameOfValue : System.Int32
Name            : Length
IsInstance      : True
...
MemberType      : Property
Value           : {@{MENU=typeInstallation; PARENT=LICENSE; MENU_GRP=0; MENU_IDX=0; MENU_OFFSET=-1; MENU_SEL-TYPE=; nrElems=13;FUNCTION=f1; info=Windows-Defender has to be uninstalled, before installing an other anti-virus program;status=-1; SEL=0; RESTART=1; STOP=},
@{MENU=activate; PARENT=; MENU_GRP=0; MENU_IDX=1; MENU_OFFSET=-1; MENU_SEL-TYPE=; nrElems=13; FUNCTION=f2; info=Windows has to be upgraded if working with an EVALUATION prod key;status=-1; SEL=0; RESTART=0; STOP=},
@{MENU=NAME; PARENT=HOST; MENU_GRP=0; MENU_IDX=2; MENU_OFFSET=-1;MENU_SEL-TYPE=; nrElems=13; FUNCTION=f3; info=F-SEC has to be configured as an isolated machine on the CSI server;status=-1; SEL=0; RESTART=0; STOP=},
@{MENU=IP; PARENT=; MENU_GRP=0; MENU_IDX=3; MENU_OFFSET=-1; MENU_SEL-TYPE=;nrElems=13; FUNCTION=f4; info=disable default Windows NTP service; status=-1; SEL=0; RESTART=1; STOP=}...}
IsSettable      : False
IsGettable      : True
TypeNameOfValue : System.Object
Name            : SyncRoot
IsInstance      : True
...
# Storing the CSV in the $csv var

$csv = @'
MENU;PARENT;MENU_GRP;MENU_IDX;MENU_OFFSET;MENU_SEL_TYPE;nrElems;FUNCTION;info;status;SEL;RESTART;STOP
typeInstallation;LICENSE;0;0;-1;0;13;f1;Windows-Defender has to be uninstalled                       
activate;;0;1;-1;0;13;f2;Windows has to be upgraded if working with an EVALUATION prod key;-1;0;0;0  
NAME;HOST;0;2;-1;0;13;f3;F-SEC has to be configured as an isolated machine on the CSI server;-1;0;0;0
IP;;0;3;-1;0;13;f4;disable default Windows NTP service;-1;0;1;0                                      
routes;;0;4;-1;0;13;f5;disable default Windows NTP service;-1;0;0;0                                  
users;;0;5;-1;0;13;f6;disable default Windows NTP service;-1;0;0;0                                   
ANTI VIRUS;SERVICEs;0;6;-1;0;13;f7;disable default Windows NTP service;-1;0;0;0                      
NTP;;0;7;-1;0;13;f8;;-1;0;0;0                                                                        
MEINBERG;;0;8;-1;0;13;f9;;-1;0;0;0                                                                   
addPATH;postgres;0;9;-1;0;13;f10;;-1;0;0;0                                                           
check;after CSI;0;10;-1;0;13;f11;;-1;0;0;0                                                           
execute;;0;11;-1;0;13;f12;;-1;0;0;1                                                                  
quite;;0;12;-1;0;13;f13;;-1;0;0;1                                                                    
WINDOWS DEFENDER;ANTI VIRUS;6;13;12;1;4;f14;;-1;0;0;0                                                
F-SEC;;6;14;12;1;4;f15;;-1;0;0;0                                                                     
execute;;6;15;12;1;4;f16;;-1;0;0;1                                                                   
quite;;6;16;12;1;4;f17;;-1;0;0;1
'@|convertfrom-csv -Delimiter ';'
$1stElementGrp_ = $csv[0]                  # Like this
$1stElementGrp_ = $csv | Select-Object -First 1   # Or Like this
$menuOFFSET_ = $1stElementGrp_.MENU_OFFSET # $menuOFFSET_ returns -1
$menuNrElems_ = $1stElementGrp_.nrElems # $menuNrElems_ returns 13
# $menuObjts.MENU_OFFSET = ($menuObjts.MENUS | Where-Object {
#   [int]$($_).MENU_GRP -eq $menuObjts.MENU_GRP
# }| Select -First 1).MENU_OFFSET
# 
# $menuObjts.nrElems = @($menuObjts.MENUS | Where-Object {
#   [int]$($_).MENU_GRP -eq $menuObjts.MENU_GRP -and [int]$($_).SEL -eq 1}).Count
# }
$csv | Where-Object {$_.MENU_OFFSET -eq -1} |
       Select-Object MENU, PARENT, MENU_GRP, MENU_IDX, MENU_OFFSET |
       Format-Table
MENU             PARENT    MENU_GRP MENU_IDX MENU_OFFSET
----             ------    -------- -------- -----------
typeInstallation LICENSE   0        0        -1
activate                   0        1        -1
NAME             HOST      0        2        -1
IP                         0        3        -1
routes                     0        4        -1
users                      0        5        -1
ANTI VIRUS       SERVICEs  0        6        -1
NTP                        0        7        -1
MEINBERG                   0        8        -1
addPATH          postgres  0        9        -1
check            after CSI 0        10       -1
execute                    0        11       -1
quite                      0        12       -1
$csv | Where-Object {$_.MENU_GRP -eq 6 -and $_.MENU -match 'Windows'} |
       Select-Object MENU, PARENT, MENU_GRP, MENU_IDX, MENU_OFFSET |
       Format-Table
MENU             PARENT     MENU_GRP MENU_IDX MENU_OFFSET
----             ------     -------- -------- -----------
WINDOWS DEFENDER ANTI VIRUS 6        13       12