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