powershell - Powershell,CSV 导入
问题描述
我在处理 CSV 文件方面不是很有经验,现在我有点难以让这个小型私人项目正常工作。
我制作了一个脚本来检查运行脚本的用户,然后从 AD 获取用户所属的部门编号。然后我想根据 CSV 文件测试该部门编号以获得正确的部门名称。
CSV 文件如下所示:
111;DepartmentBlue
222;DepartmentRed
333;DepartmentGreen
如何让我的脚本检查我从 AD 获得的部门编号是否存在于第 1 列的此 CSV 文件中,然后返回部门名称(第 2 列)?
这就是我得到的:
Function outputData {
$outputUser.Text = ((Get-ADUser -Identity $env:username -Properties SamAccountName).SamAccountName)
$outputDep.Text = ((Get-ADUser -Identity $env:username -Properties Department).Department)
$dep = $outputDep.Text
$source = Import-Csv -Path "C:\temp\Script\departments.csv"
foreach($i in $source){
if($dep -eq $i){
#give me the department name
}
}
}
解决方案
修改您当前的代码,您可以尝试以下操作:
Function outputData {
$ADUser = Get-ADUser -Identity $env:username -Properties Department
$dep = $ADUser.Department
$username = $ADUser.SamAccountName # Doesn't seem to be needed
$source = Import-Csv -Path "C:\temp\Script\departments.csv" -Delimiter ';'
foreach($i in $source){
if($dep -eq $i.departmentNumber){
$i.departmentName
}
}
}
outputData
所有这些都假定 CSV 文件的第一行是DepartmentNumber;DepartmentName
. 或者,您可以保留不带标题的 CSV 文件,并将-Header
参数添加到您的Import-Csv
命令中,如下所示:
Function outputData {
$ADUser = Get-ADUser -Identity $env:username -Properties Department
$dep = $ADUser.Department
$source = Import-Csv -Path "C:\temp\Script\departments.csv" -Delimiter ';' -Header "DepartmentNumber","DepartmentName"
foreach($i in $source){
if($dep -eq $i.departmentNumber){
$i.departmentName
}
}
}
outputData
这一切都假设Department
AD 中的属性包含部门编号值,目标是在 CSV 文件中查找相同的编号并在同一行返回相应的部门名称。这段代码没有一个是有效的。我们可以用更少的循环来实现这一点。
.where()
没有循环和使用该函数的替代方法如下:
Function outputData {
$ADUser = Get-ADUser -Identity $env:username -Properties Department
$dep = $ADUser.Department
$source = Import-Csv -Path "C:\temp\Script\departments.csv" -Delimiter ';' -Header "DepartmentNumber","DepartmentName"
$source.where({$_.departmentnumber -eq $dep},'First').departmentname
}
outputData
另一种选择是使用字符串到哈希表的转换,如下所示:
Function outputData {
$ADUser = Get-ADUser -Identity $env:username -Properties Department
$dep = $ADUser.Department
$source = (gc c:\temp\test1\test2.csv -raw) -replace ';','=' | ConvertFrom-StringData
$source[$dep]
}
outputData
推荐阅读
- php - 扩展运算符 PHP
- javascript - 在 vue js 的子组件中使用 getElementbyId 无法呈现自定义组件的样式
- ios - iOS如何停止文本字段将“--”转换为“--”
- javascript - 有没有办法让对象的值动态地知道它自己的键?
- kotlin - 如何在 Kotlin DSL 中使用自定义 sourceSet 扩展配置插件
- graph - 通过 Graph API 获取分配给计划任务的所有用户
- python - 无法使用 https://pypi.org/project/mongojoin/ 中指定的包和代码在 mongodb 中执行连接
- java - 在 Spring Oauth 中自定义 401 Unauthorized 错误消息
- javascript - TypeScript:是否可以制作一个使用泛型类型的函数来确定它可以将对象的哪个键作为其参数
- git - Gitflow 功能文件夹包含奇怪的字符