【问题标题】:Trimming ArrayList Elements修剪 ArrayList 元素
【发布时间】:2021-05-13 14:42:24
【问题描述】:

所以,我正在编写一个 PS 脚本来从网络打印机获取权限。这部分很容易得到。输出的格式和去除绒毛有点棘手,但我也能做到。

我需要做的是修剪存储打印机权限输出的 ArrayList 的元素,这似乎是出于某种原因。

数组列表示例:

  1. 元素 1:

    A;;SWRC;;;S-1-5-21-1951847071-1425869424-1185269715-347033
    
  2. 要素 5:

    A;OIIO;RPWPSDRCWDWO;;;S-1-5-21-1951847071-1425869424-1185269715-111469
    

两者的区别在于 E1 允许关联的用户向打印机发送打印作业。 E2(本质上)是对打印机和文档的完全控制。

如何分割这些元素以提取“SWRC”或“OIIO;RPWPSDRCWDWO”各自的权限?

使用$AL[1].TrimStart("A;;") 将摆脱我认为的身份验证方面。但是不同用户的不同数量的权限让我感到困惑。特别是当完全控制用户不以“A;;”开头时,他们以“A;”开头。

【问题讨论】:

  • 结果应该是什么?

标签: windows powershell printing


【解决方案1】:

听起来您希望输入字符串中的第二个和第三个;-分隔字段,您可以通过-split operator 将字段作为数组获取,提取感兴趣的字段并重新加入他们用-join operator

.ForEach() array (collection) method 允许您有效地对数组列表的每个元素应用操作(foreach statement 会稍微快一些,但更详细;ForEach-Object cmdlet 也可以,但速度较慢)。

# Sample input.
[System.Collections.ArrayList] $arrayList = 
  'A;;SWRC;;;S-1-5-21-1951847071-1425869424-1185269715-347033',
  'A;OIIO;RPWPSDRCWDWO;;;S-1-5-21-1951847071-1425869424-1185269715-111469'

# Adjust the range of indices to extract (1..2) and
# the -join character (';') as needed.
$trimmedList = $arrayList.ForEach({ ($_ -split ';')[1..2] -join ';' })

之后,$trimmedList 包含一个集合[1],其中包含逐字元素 ;SWRCOIIO;RPWPSDRCWDWO

注意:

  • 1..2..range operator 的应用程序,并创建一个以1 开头并以2 结尾的整数的数组,即它是等价的数组字面量1, 2.

    • 根据需要进行调整;例如,1..5 等同于 1, 2, 3, 4, 5
  • 在应用于另一个数组的索引表达式 ([...]) 中,这些整数用作要提取的元素的索引,作为子数组。 例如,[1..2] 返回第 2 个和第 3 个元素(假设数组索引基于 0)。


[1] .ForEach() 方法返回 [System.Collections.ObjectModel.Collection[psobject]] 类型的集合,但在大多数情况下,它的行为类似于数组列表(或常规 PowerShell 数组)。

【讨论】:

  • 谢谢,mklemento0。这确实有效。不过我稍微修改了一下。所以,我使用 $AL.ForEach({ ($_ -split ';')[1..5] -join '' }) 而不是 $AL.ForEach({ ($_ -split ';')[1..2] -join ';' }) 那么,[1..5] 部分有什么作用?如果我将它从 2 更改为 5(在您的示例中),我会将烫发和 SID 放在一起。不确定这在其中有何作用。
  • 很高兴听到它有帮助,@Dalebert;回复[1..5]:请看我的更新;我假设您想再次使用; 加入提取的字段,但您可以选择任何您想要的分隔符。
  • 哦,是的。这就说得通了。感谢您的指导!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多