【问题标题】:AD query Powershell and Export to txt fileAD 查询 Powershell 并导出到 txt 文件
【发布时间】:2014-06-13 20:46:32
【问题描述】:

有人可以帮我吗?

我必须创建一个具有以下格式的.txt 文件:

user("SamAccountName","GivenName Surname"){}

我可以创建这个:

#Get AD Users Info
cls
$SamAccountName = New-Item 'c:\SamAccountName.txt' -type file -Force

Get-ADUser -Filter * -Properties SamAccountName | 
    select -First 15 | Sort-Object SamAccountName |
         Format-Table SamAccountName | Out-File $SamAccountName


$content = Get-Content $SamAccountName
$content | Foreach {$_.TrimEnd() } | where {$_ -ne ""} | Select-Object -Skip 3 | Set-Content $SamAccountName


#Write quotes (make it nice and readable!)
$ACTIVEDIRECTORY = New-Item 'c:\ACTIVEDIRECTORY.lst' -type file -Force

Clear-Content $ACTIVEDIRECTORY

$quotes= '"'

(Get-Content $SamAccountName) |     
    ForEach-Object {Add-Content $ACTIVEDIRECTORY "$quotes$_$quotes"}

    Get-Content $ACTIVEDIRECTORY

这给了我这个结果:

"GivenName"
"GivenName"
"GivenName"

【问题讨论】:

  • 通读您的代码....您知道部分在做什么以及为什么,或者这只是复制和粘贴?使用 cmets 并制定如何实现目标的计划。要回答这个问题,我需要重写整个代码。 :-/

标签: powershell active-directory


【解决方案1】:

我同意@notjustme 关于你的问题一团糟的观点,但无论如何我都会给出答案。

您的第一个问题是如何设置这两个变量。它们最终成为对象,但您正在尝试像文件路径一样使用它们。

$SamAccountName = "c:\SamAccountName.txt"
$ACTIVEDIRECTORY = "c:\ACTIVEDIRECTORY.lst"

这将为您提供一个逗号分隔的用户列表,这(某种程度上)是您的代码正在执行的部分。

Get-ADUser -Filter * | Select-Object SamAccountName, GivenName, SurName -First 15 | Sort-Object SamAccountName | Export-Csv $SamAccountName -NoTypeInformation

这将为您提供具有您在顶部指定的字符串格式的用户列表,这很奇怪,但无论如何。

Import-Csv $SamAccountName | ForEach-Object {"user(`"$($_.SamAccountName)`",`"$($_.GivenName) $($_.Surname)`"){}"} | Out-File $ACTIVEDIRECTORY

【讨论】:

  • 干得好!我猜你正确地破译了所有这些。 :)
【解决方案2】:

目前无法亲自尝试,但...根据经验...

-properties * | select SamAccountName, GivenName, Surname

应该让你在球场上。

重新阅读您的代码几次,好吧......老实说,这似乎是一团糟。你陈述了你想要完成的事情,然后还有一大堆其他的东西在这种情况下几乎没有意义。也许我太累了,我会在早上回来查看并根据需要编辑/删除。

好吧,再读几遍,头疼了,但还是……

一般来说,如果 Powershell 难以将其分解为易于处理的部分,我想建议您(或任何人,真的)。

为了用户;

$users = Get-ADUser -Filter { Name -like '*' } -Properties * | select SamAccountName, Givenname, Surname

对于输出;

foreach ($user in $users)
{
    '("{0}""{1}{2}"' -f $user.SamAccountName, $user.GivenName, $user.Surname
}

不幸的是,我目前无法亲自尝试,但它应该在球场上......如果您最终遇到一些错误,请让我知道,我相信我可以指导您完成它。在这种特殊情况下,我不能 100% 确定它们是单引号还是双引号……我必须尝试一下。

【讨论】:

    猜你喜欢
    • 2019-10-11
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多