数组理解中的 PowerShell 函数

mal*_*gos 3 powershell

我正在解析 Windows 系统 ($system) 的所有登录信息。我正在尝试获取域、用户、会话 ID 的元组/数组。

$logged_on_users = Get-WmiObject Win32_LoggedOnUser -ComputerName $system
Run Code Online (Sandbox Code Playgroud)

然后我调用类型的函数来提取每个值中的两个变量(Antecedent 和 Depedent):

$all_user_sessions = @()
foreach ($x in $logged_on_users){
  $t = @()
  $t += $x.GetPropertyValue("Antecedent").tostring()
  $t += $x.GetPropertyValue("Dependent").tostring()
  $all_user_sessions += $t
}
Run Code Online (Sandbox Code Playgroud)

单行数组理解的语法是什么(如果可能的话)?我有:

$all_user_sessions = ($logged_on_users | % { @($_.GetPropertyValue("Antecedent").tostring(), $_.GetPropertyValue("Dependent").tostring() ) })
Run Code Online (Sandbox Code Playgroud)

当我添加

foreach ($s in $all_user_sessions){
  echo $s.GetType().FullName
}
Run Code Online (Sandbox Code Playgroud)

类型是字符串,而不是数组。

Tim*_*ill 5

这听起来有点奇怪,但您需要在ForEach-Object循环中的数组之前添加一个逗号:

$all_user_sessions = ($logged_on_users | % { ,@($_.GetPropertyValue("Antecedent").tostring(), $_.GetPropertyValue("Dependent").tostring() ) })
Run Code Online (Sandbox Code Playgroud)

在编写代码时,您将所有内容添加到单个数组中。像这样放置逗号将创建每个索引的数组(实际上是一个对象)。