从txt文件中提取名字和姓氏,并使用它从AD中获取用户名并将其导入到csv中

杰维斯:

作为一种测试和从AD中获取特定数据的方法,我试图基于包含用户名和姓氏的txt文件获取数据。我了解到,使用ConvertFrom-Stringcmdlet可以将txt文件中的名称拆分为两个单独的值,从而使您能够使用(理论上)Get-ADUser从AD及其属性中查找用户。

我到目前为止使用的代码如下,随着我尝试各种选项使其工作,在这里和那里进行了随机更改。通过将名称存储在变量下,然后使用Get-ADUsercmdlet从AD提取它们,我已经能够获取所需的数据,甚至可以将数据导出到CSV文件中。当文本文件中填充了多个条目时,问题就无法解决。

Get-Content C:\temp\users.txt -encoding UTF8 |
ConvertFrom-String |
ForEach-Object {Get-ADUser -Filter {(givenName -Like '$($_.P1)') -and (sn -Like '$($_.P2)')} -Properties *} |
Select-object givenName, Surname, SamAccountName | Export-CSV C:\Temp\usersexport.csv -NoTypeInformation

任何帮助将不胜感激。

史蒂文:

您正在非扩展字符串中使用子表达式。请查看Powershell的about_Quoting_Rules帮助主题,以获取更多详细信息。但是,总而言之,您需要使用双引号将扩展为$($_)

就像是:

Get-Content C:\temp\users.txt -encoding UTF8 |
ConvertFrom-String |
ForEach-Object {Get-ADUser -Filter "( givenName -like '$($_.P1)' ) -and (sn -like '$($_.P2)' )" -Properties *} |
Select-object givenName, Surname, SamAccountName | Export-CSV C:\Temp\usersexport.csv -NoTypeInformation

注意,我引用了整个过滤器。从技术上讲Get-ADUser-Filter参数采用字符串,因此可以接受,并且使其更易于阅读。

另请注意:您可能需要“ *”才能使其正常工作。从技术上讲,like可以在完全匹配上工作,但是在使用通配符搜索时更常用。就您而言,使用'*$($_.P1)*'可能有助于您解决问题。

如果您对这些值充满信心,尤其是考虑到您还使用-and运算符,则可以考虑使用-eq但是,我会担心,因为经常会有通用名称冲突的可能性。例如在美国,很容易在AD中有2位John Smiths ...

我还要指出,为此使用Import-Csv更方便。纠正后,您的方法可行,但首先,以下内容更具可读性和易写性:

范例-eq

Import-Csv -Path C:\temp\users.txt -header "givenName","sn" -Delimiter " " |
ForEach-Object{
    $GivenName = $_.givenName
    $LastName  = $_.sn
    ForEach-Object { Get-ADUser -Filter "(givenName -eq '$GivenName') -and (sn -eq '$LastName')" -Properties * }
} | 
Select-Object givenName, Surname, SamAccountName | 
Export-CSV C:\Temp\usersexport.csv -NoTypeInformation

-like和通配符的示例

Import-Csv -Path C:\temp\users.txt -header "givenName","sn" -Delimiter " " |
ForEach-Object{
    $GivenName = $_.givenName
    $LastName  = $_.sn
    ForEach-Object { Get-ADUser -Filter "(givenName -like '*$GivenName*') -and (sn -like '*$LastName*')" -Properties * }
} | 
Select-Object givenName, Surname, SamAccountName | 
Export-CSV C:\Temp\usersexport.csv -NoTypeInformation

您可能还想要避免-Properties *,而是定义一组更精确的属性来进行检索。在更大的工作中,这将使性能有所不同。

哦,而且,您通常不需要指定编码,因为Get-Content它很擅长自己弄清楚。

在PowerShell Core中,该参数的默认值为UTF8NoBOM。NoBOM只是意味着没有“字节顺序标记”声明编码,因此UTF8文件应该没有任何问题。在Windows PowerShell 5.1中,您可能需要指定。

看来这是您的学习练习,如果有帮助,请告诉我。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从使用MVC5应用程序中的Asp.Identity进行身份验证的用户的Google帐户中获取名字+姓氏

Laravel-如何从不同的字段中获取名字和姓氏并将其存储在数据库的名称列中?

从模式电子邮件地址中提取名字和姓氏

在Firebase中获取用户名,姓氏和ID

获取用户名和姓氏

从电子邮件地址中提取名字和姓氏

JavaScript从字符串中获取名字和姓氏作为数组

从iforge提取数据并将其导入到csv中时出现时间戳问题

提取名字和姓氏

尝试从文本文件中打印名字,但同时获取名字和中间名

PostgreSQL如何编写存储过程以从表中获取名字和姓氏

从UserCreationForm中删除用户名,并根据电子邮件,名字和姓氏自动为用户生成用户名

(AWK)使用名字和姓氏列中的字符创建用户名列

如何通过使用javascript删除中间名来仅提取名字和姓氏

从全名QString中获取名字和姓氏

如何从csv文件中的名字的姓氏缩写创建用户名?

如何在Active Directory中获取用户名并在Windows Services中使用它?

从持久保存在MongoDB中Node.js中的全名中获取名字和姓氏

使用 ASP.NET 从 Facebook 获取名字、姓氏和电子邮件地址

从 Sharepoint 中的当前用户获取名字和姓氏

如何在 Java 中从这个 JSON 中获取名字姓氏和 ID 就像使用 Gson google json 库一样

从企业 G-Suite 中的电子邮件地址获取名字和姓氏

在 VSTO C# 中获取名字和姓氏

使用 Firebase 在 Flutter 中获取用户名字的首字母?

如何从字符串中获取名字和姓氏?

如何检索用户名字和姓氏并将其映射到 ViewModel

如何使用PowerShell根据名字和姓氏的文件名生成用户名

使用PowerShell从文本文件中提取用户名和电子邮件

当有人在Javascript中输入全名时如何获取名字和姓氏?