数组理解中的PowerShell函数

时间:2014-06-06 21:01:15

标签: powershell

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

$logged_on_users = Get-WmiObject Win32_LoggedOnUser -ComputerName $system

然后我调用类型的函数在每个值中提取两个变量(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
}

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

$all_user_sessions = ($logged_on_users | % { @($_.GetPropertyValue("Antecedent").tostring(), $_.GetPropertyValue("Dependent").tostring() ) })

当我添加

foreach ($s in $all_user_sessions){
  echo $s.GetType().FullName
}

类型是String,而不是Array。

1 个答案:

答案 0 :(得分:2)

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

$all_user_sessions = ($logged_on_users | % { ,@($_.GetPropertyValue("Antecedent").tostring(), $_.GetPropertyValue("Dependent").tostring() ) })

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