我正在解析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。
答案 0 :(得分:2)
这听起来有点奇怪,但你需要在ForEach-Object
循环中的数组之前添加一个逗号:
$all_user_sessions = ($logged_on_users | % { ,@($_.GetPropertyValue("Antecedent").tostring(), $_.GetPropertyValue("Dependent").tostring() ) })
在编写代码时,您需要将所有内容添加到单个阵列中。像这样放置逗号将创建每个索引的数组(实际上是一个对象)。