【问题标题】:Using a text file to loop through PowerShell command使用文本文件循环 PowerShell 命令
【发布时间】:2018-09-10 20:53:59
【问题描述】:

我有一个文本文件 test.txt,其中包含一个 OU 列表,我需要在其中计算在每个 OU 中找到的用户数量。

test.txt:

"ou=MyOU1,dc=Mydomain,dc=net" "ou=MyOU2,dc=Mydomain,dc=net" "ou=MyOU3,dc=Mydomain,dc=net"

我将其传递给 PowerShell 中的命令:

Get-Content .\test.txt | Out-String | ForEach-Object {
    (Get-ADUser -Filter * -SearchBase "$_").Count
}

我收到以下错误:

Get-ADUser :提供的 distinctName 必须属于 以下分区:'DC=Mydomain,DC=net, CN=配置,DC=Mydomain,DC=net, CN=Schema,CN=Configuration,DC=Mydomain,DC=net, DC=ForestDnsZones,DC=Mydomain,DC=net, DC=DomainDnsZones,DC=Mydomain,DC=net'。 在行:1 字符:62 + ... ing) | ForEach-Object {(Get-ADUser -Filter * -SearchBase "$_").Count} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Get-ADUser], ArgumentException + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.GetADUser

但是,当我单独运行 OU 时,它可以工作。

PS> (Get-ADUser -Filter * -SearchBase "ou=MyOU1,dc=Mydomain,dc=net").Count
10782

【问题讨论】:

    标签: powershell active-directory powershell-5.0


    【解决方案1】:

    注意:Out-String 的使用不仅在您的代码中是不必要的,而且实际上会创建一个单个输出字符串,这会导致您的命令出现故障,因为@987654322 @ 然后只被称为 once,带有一个 多行 字符串。

    Get-Content 本身通过管道单独发送文本文件的行,这就是您想要的:

    Get-Content .\test.txt | foreach-object {
      (get-aduser -filter * -searchbase $_).count
    }
    

    请注意,$_ 已经是一个字符串,因此您无需将其包含在"..." 中。

    除此之外,if 您文件中的行确实包含"..."-封闭字符串,正如您的示例输入所暗示的那样(可能不是,因为错误消息没有反映它们),并且您无法修复文件本身,您必须删除这些双引号,否则它们会成为传递给-SearchBase字符串的一部分

    Get-Content .\test.txt | foreach-object {
      (get-aduser -filter * -searchbase ($_ -replace '"')).count
    }
    

    【讨论】:

    • 很高兴听到这个消息,@NHunter。如果它解决了您的问题,请不要忘记接受答案。
    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2017-09-16
    相关资源
    最近更新 更多