代码之家  ›  专栏  ›  技术社区  ›  Dmitrij Kultasev

在powershell调用表达式中使用cmd管道

  •  0
  • Dmitrij Kultasev  · 技术社区  · 7 年前

    我正试着从网上得到所有的电子邮件和用户名 Active Directory 从具体的 Organization Unit powershell . 这是我的密码:

    function Invoke-CmdCommand {
        Param(
            [parameter(position = 0)]
            $Cmd , 
            [parameter(position = 1)]
            $RunFolder = $PSScriptRoot
        )
        try {
            $cmdToRun = "cmd /c cd `"$RunFolder`" `"&`" $Cmd";
            Write-Host "$RunFolder> $Cmd";
            Invoke-Expression "& $($cmdToRun.Replace("^","^^"))";
        }
        catch {
            Write-Error "********** Function $($MyInvocation.MyCommand.Name) failed **********";
            Write-Error $_.Exception.Detail.InnerText;
            exit 1;
        }
    }
    
    
    $cmd = "dsquery user `"OU=Disabled Users,DC=microfinancial,DC=com`" -limit 10000 | dsget user -samid -email"
    
    $test = Invoke-CmdCommand -Cmd $cmd
    

    我得到以下错误:

    数据获取failed:Value for “此命令的目标对象”包含错误的 格式。键入dsget/?寻求帮助。

    我能做什么?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Gabriel Luci    7 年前

    正如上面的评论所指出的,使用 Get-ADUser . 这将获得一个仅包含用户名和电子邮件地址的对象数组:

    Import-Module ActiveDirectory
    Get-ADUser -Filter * -SearchBase "OU=Disabled Users,DC=microfinancial,DC=com" `
        -Properties SamAccountName,EmailAddress `
      | Select-Object SamAccountName,EmailAddress
    

    如果 Import-Module ActiveDirectory 不适用于您,请安装RSAT(假设您在Windows 10上): https://www.microsoft.com/en-ca/download/details.aspx?id=45520

    Import-Module ServerManager
    Add-WindowsFeature RSAT-AD-PowerShell
    
        2
  •  1
  •   jrider    7 年前

    如果你只想通过Active Directory发送电子邮件和用户名, Get-ADUser ActiveDirectory 模块是首选路径。

    -SearchBase 将允许您确定要开始使用的OU的范围。您需要指定要包含在中的属性 得到阿杜塞 -Properites . 这个 Select 将仅显示要使用的属性。

    以下示例将获取所有用户的用户名(samaccountname)和主电子邮件:

    Get-ADUser -filter * -Properties SamaccountName, mail -SearchBase "DC=domain,DC=local" | Select SamaccountName, Mail
    
    推荐文章