PowerShell脚本查询AD中特定OU的计算机名称并导出

3
我在PowerShell方面几乎是个新手,我正在开发一个项目,其中需要对网络上的一些计算机进行安装软件清单的记录。我找到了一个脚本来处理软件清单部分,但它依赖于一个包含计算机名的文本文件来扫描。我正在寻找一种方法来查询AD以获取特定OU的计算机名。理想情况下,脚本会提示用户输入OU和要导出到的文本文件路径。然后它将搜索AD并导出到指定的路径。例如,要导出OU=Workstations,OU=New York,DC=Fabrikam,DC=com中的所有计算机,“用户”应该接收提示并输入“New York”,所有计算机名称都将导出到指定的路径。非常感谢您的帮助。

2
你尝试过什么?Stack Overflow 的目的不是让人们发布请求让别人为他们完成任务,而是在遇到特定问题时获得帮助。 - alroc
提问代码的问题必须表现出对问题的最基本理解。请包括已尝试的解决方案,为何它们不起作用以及期望的结果。另请参阅:Stack Overflow问题清单 - JPBlanc
抱歉,我在Stack Overflow的不同问题中找到了几个与我想要的相似的内容。至于我尝试过什么,我使用了以下代码,但它只是搜索了一个特定的OU,并没有提供用户输入的选项。 Get-ADComputer -LDAPFilter "(name=laptop)" -SearchBase "OU=Workstations,OU=New York,DC=Fabrikam,DC=com" - YEMyslf
2个回答

6
为了简单实现,可以使用PowerShell中的Active Directory模块。您可以使用类似于以下脚本的脚本检索计算机名称:
$City = Read-Host 'City'
$ou = "OU=Workstations,OU=$City,DC=Fabrikam,DC=com"

$Computers = Get-ADComputer -Filter '*' -SearchBase $ou

$Computers | Foreach { $_.DNSHostName } | Out-File -Filepath "output.txt"

谢谢您的回复。这对我很有帮助。只是想提醒一下,当我按照代码列表运行时,没有提示我输入保存输出的位置,也找不到输出文件。但如果我输入完整路径,它确实可以工作。我理解Out-File cmdlet,但-Filepath部分应该怎么做呢? - YEMyslf
太好了!如果在脚本(.ps1)文件中运行,则Read-Host将提示,但手动设置OU也可以。 Out-File中的“-Filepath”是您要输出文本的路径和文件名。即“output.txt”将名称放入名为output.txt的文件中,该文件位于当前目录中。如果您希望文件去其他地方,也可以说类似于:“C:\ folder \ output.txt”。 - HAL9256

2
   $City = Read-Host 'City'
   $file = Read-host 'File path'
   try{
   $ou = "OU=Workstations,OU=$City,DC=Fabrikam,DC=com"
   Get-ADComputer -Filter '*' -SearchBase $ou -properties DNSHostName | %  
   DNSHostName | Out-File -Filepath $file
   }
   catch {
   $error[0].exception.message
   }

这样做可以使速度更快,占用的内存更少。


我喜欢你在最后的错误检查。这是我们应该更多做的事情。 - Keybonesabi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接