powershell - PowerShell ConvertFrom-Csv
问题描述
所以这是我的代码。本质上,域管理员将使用此代码在我们的终端服务器上运行。我列出了所有当前登录的用户,并检查他们的个人组成员资格,然后计算成员数量。十分简单。
其中 99% 可以按预期工作,但到目前为止我还不是代码专家。我在从使用 quser 的第 4 行获取正确的名称列表时遇到问题。如果我切换到使用第 5 行作为文本,代码将按预期工作。
我终其一生都无法将第 4 行的输出转换为可以在其余代码中使用的格式。
Import-Module ActiveDirectory
$calgary = 0
$edmonton = 0
$users = (quser) -replace '\s{2,}', ',' | ConvertFrom-Csv | Select-Object USERNAME
$usersold = "Thomas", "Scott", "jeremy"
$groups = 'Domain Admins'
foreach ($user in $users) {
foreach ($group in $groups) {
$members = Get-ADGroupMember -Identity $group -Recursive | Select -ExpandProperty SamAccountName
If ($members -contains $user) {
$calgary = $calgary + 1
Write-Host "$user is a member of $group"
Write-Host "$group has $calgary logged in users"
} Else {
Write-Host "$user is not a member of $group"
}
}
}
解决方案
$users.GetType()
返回一个 Array 类型的元素PSCustomObject
,因此这是一个具有属性的对象,而不仅仅是一个字符串列表。
当您这样做时($user in $users)
,每个$user
都是具有该USERNAME
属性的对象。所以你有两个选择:
在循环中访问 USERNAME
当您需要循环内的用户名时,请使用$user.USERNAME
获取字符串列表而不是对象
将第 4 行替换为:
$users = $((quser) -replace '\s{2,}', ',' | ConvertFrom-Csv | Select-Object USERNAME).USERNAME
推荐阅读
- c# - 如何从表达式树中设置属性值?
- spring-boot - 如何通过 application.yaml 传递的参数禁用和启用 Spring Boot KeyCloak 配置?
- curl - 正确使用 Appnexus API
- android - 无法正确限制文本
- node.js - 无法使用 node.js 和 mongoose 从 mongoDB 获取数据
- git - 带有 GUI 的 Git 私人设置服务器,其中包括 GitHub 的功能
- docker - 将 NetBeans 连接到 Docker 容器上的 Xdebug
- javascript - 仅替换给定模式中的一个 url 参数
- react-native-android - 在 android 中构建 react 本机应用程序时出现错误
- c# - 我们如何在一个项目中添加实体框架并在另一个项目中将其用作服务?