這應該很簡單,但是 powershell 沒有給我一個有效的輸出。我對處理這個問題的其他方法持開放態度。在高層次上,如果建議另一個選項,我需要可以從函式的引數中使用的東西。
這是我想要做的:
$PrinterPermissions =
@(
@('Administrators', 'ManagePrinters','Allow'),
@('Power Users', 'ManagePrinters','Allow'),
@('Print Operators', 'ManagePrinters','Allow'),
@('OHD – Network Support Team', 'ManagePrinters','Allow'),
@("OHD – PC Support Team", 'ManageDocuments','Allow'),
@("OHD - Service Desk Users", 'ManageDocuments','Allow')
)
$PrinterPermissions = @("gprt_PrinterA","ManageDocuments","Allow")
要訪問我希望呼叫它的物件,如下所示:
$PrinterPermissions[0][0] *= Administrators*
$PrinterPermissions[0][1] *= ManagePrinters*
$PrinterPermissions[0][2] *= Allow*
但是,當我將新添加的物件呼叫到陣列時,前 6 個物件正常作業,但新添加的物件功能如下:
$PrinterPermissions[6] = gprt_PrinterA
$PrinterPermissions[6][0] = g
$PrinterPermissions[6][1] = p
$PrinterPermissions[6][2] = r
$PrinterPermissions[7] = ManageDocuments
$PrinterPermissions[8] = Allow
我想要的是新添加的專案在陣列中作為前 6 個專案運行。所以我可以動態添加到陣列中。我究竟做錯了什么。
uj5u.com熱心網友回復:
我同意mklement0你最好使用通用串列來完成這項作業,因為它旨在添加/洗掉與“普通”陣列不同的專案,“普通”陣列必須在每次添加時作為一個整體在記憶體中重建。
此外,當您可以使用物件(正如您的問題的標題所暗示的那樣)可以更清潔地(IMO)執行此操作時,為什么還要將其作為陣列來做呢?
# create a new List of objects
$PrinterPermissions = [System.Collections.Generic.List[object]]::new()
# set up the initial 6 items in the list
$PrinterPermissions.AddRange(([PsCustomObject]@{ Group = 'Administrators'; Permission = 'ManagePrinters'; AccessType = 'Allow' },
[PsCustomObject]@{ Group = 'Power Users'; Permission = 'ManagePrinters'; AccessType = 'Allow' },
[PsCustomObject]@{ Group = 'Print Operators'; Permission = 'ManagePrinters'; AccessType = 'Allow' },
[PsCustomObject]@{ Group = 'OHD – Network Support Team'; Permission = 'ManagePrinters'; AccessType = 'Allow' },
[PsCustomObject]@{ Group = 'OHD – PC Support Team'; Permission = 'ManagePrinters'; AccessType = 'Allow' },
[PsCustomObject]@{ Group = 'OHD - Service Desk Users'; Permission = 'ManagePrinters'; AccessType = 'Allow' }))
# add a new item to the list
$PrinterPermissions.Add([PsCustomObject]@{ Group = 'gprt_PrinterA'; Permission = 'ManagePrinters'; AccessType = 'Allow' })
# show on screen
$PrinterPermissions
結果
Group Permission AccessType
----- ---------- ----------
Administrators ManagePrinters Allow
Power Users ManagePrinters Allow
Print Operators ManagePrinters Allow
OHD – Network Support Team ManagePrinters Allow
OHD – PC Support Team ManagePrinters Allow
OHD - Service Desk Users ManagePrinters Allow
gprt_PrinterA ManagePrinters Allow
檢索第 7 項:
$PrinterPermissions[6]
結果
Group Permission AccessType
----- ---------- ----------
gprt_PrinterA ManagePrinters Allow
從串列中的專案中獲取單個屬性
$PrinterPermissions[5].Group # --> OHD - Service Desk Users
$PrinterPermissions[5].Permission # --> Allow
將串列保存為 CSV 檔案以備后用(可能在 Excel 中)
$PrinterPermissions | Export-Csv -Path 'X:\PrinterPermissions.csv' -UseCulture -NoTypeInformation
等等。
uj5u.com熱心網友回復:
筆記:
該答案解決了所問的問題。
有關使用自定義物件而不是嵌套陣列的最終更好的解決方案,請參閱Theo 的有用答案。
為了將 RHS 陣列添加為單個元素,您必須使用陣列構造運算子,的一元形式將其包裝在瞬態單元素包裝器陣列中。
$PrinterPermissions = , @("gprt_PrinterA","ManageDocuments","Allow")
請注意,從技術上講,每次添加到陣列都會創建一個新陣列,這是低效的。對于小陣列,這可能無關緊要,但是對于迭代添加許多元素,您應該考慮切換到可有效擴展的串列型別,例如[System.Collections.Generic.List[string]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/402170.html
下一篇:我如何自動設定[L]不是全部?
