为启用的本地管理员列表每行添加=>符号的PowerShell脚本问题
问题分析与解决
你的脚本核心问题出在循环逻辑:你在循环里把整个$EnabledLocalAdmin数组拼接到了前缀后,而非取当前索引对应的单个用户;同时$EnabledLocalAdmins变量未提前初始化,导致输出异常。
修正后的脚本方案
方案一:修复原循环逻辑
$isEnabled = (Get-LocalUser | Where-Object {$_.Enabled}).Name $localAdminUsers = (Get-CimInstance Win32_GroupUser | where {$_.GroupComponent -like "*admini*"} | select -ExpandProperty PartComponent).Name $EnabledLocalAdmin = $localAdminUsers | Where {$isEnabled -Contains $_} # 初始化结果数组 $EnabledLocalAdmins = @() for ($i=0; $i -lt $EnabledLocalAdmin.Count; $i++) { # 取当前索引的单个用户,添加前缀后存入结果数组 $EnabledLocalAdmins += "=> " + $EnabledLocalAdmin[$i] } $EnabledLocalAdmins
方案二:更简洁的管道遍历方式
PowerShell更推荐用管道处理集合,代码更简洁易读:
$isEnabled = (Get-LocalUser | Where-Object Enabled).Name $localAdminUsers = (Get-CimInstance Win32_GroupUser | Where-Object GroupComponent -like "*admini*" | Select-Object -ExpandProperty PartComponent).Name # 直接遍历每个符合条件的用户,添加前缀 $EnabledLocalAdmin = $localAdminUsers | Where-Object {$isEnabled -contains $_} | ForEach-Object {"=> $_"} $EnabledLocalAdmin
输出效果
执行修正后的脚本后,会得到你期望的输出:
=> Admin1 => Admin2 => Admin3
内容的提问来源于stack exchange,提问作者Darren
相关产品推荐
相关产品推荐

