【发布时间】:2019-07-13 19:12:11
【问题描述】:
目前,我正在尝试向我的 powershell 脚本添加一个函数,其目标如下:
在尚未添加到域的计算机上,让它根据用户的输入在本地 AD 服务器(非天蓝色)中搜索下一个可用名称。
我过去曾尝试过使用数组但失败了,我想在此使用 Get-ADComputer cmdlet,但我不知道如何实现它。
$usrinput = Read-Host 'The current PC name is $pcname , would you like to rename it? (Y/N)'
if($usrinput -like "*Y*") {
Write-Output ""
$global:pcname = Read-Host "Please enter the desired PC Name"
Write-Output ""
$userinput = Read-Host "You've entered $pcname, is this correct? (Y/N)"
if($usrinput -like "*N*") {
GenName
#name of the parent function
}
Write-Output ""
上面的代码是一个更大的脚本的一部分,它解析一个计算机名称并最终将其分配给正确的 OU。
我们的命名方案是这样的:BTS-ONE-LAP-000
所以它是:部门 - 位置 - 设备类型 - 设备计数
然后,代码将获取第一部分“BTS-ONE”并解析它以找到它应该去的正确 OU,然后使用 Add-Computer cmdlet 分配它。它还会将机器重命名为用户输入的任何内容 ($pcname)。
因此,在解析名称之前,我希望它搜索 AD 中的所有当前名称。
因此,用户可以输入:“BTS-ONE-LAP”,它会自动找到下一个可用的设备计数,并将其添加到名称中。所以,它会自动生成“BTS-ONE-LAP-041”。
补充说明:
我用过Get-ADComputer -Filter 'Name -like "BTS-ONE-LAP-*"' | FT Name,输出是
Name
----
BTS-ONE-LAP-001
BTS-ONE-LAP-002
BTS-ONE-LAP-006
BTS-ONE-LAP-007
BTS-ONE-LAP-009
BTS-ONE-LAP-010
BTS-ONE-LAP-022
BTS-ONE-LAP-024
BTS-ONE-LAP-025
BTS-ONE-LAP-028
BTS-ONE-LAP-029
BTS-ONE-LAP-030
BTS-ONE-LAP-031
BTS-ONE-LAP-032
BTS-ONE-LAP-034
BTS-ONE-LAP-035
BTS-ONE-LAP-036
BTS-ONE-LAP-037
BTS-ONE-LAP-038
BTS-ONE-LAP-039
BTS-ONE-LAP-040
BTS-ONE-LAP-041
BTS-ONE-LAP-050
BTS-ONE-LAP-051
我不知道如何解析这个,所以代码知道 BTS-ONE-LAP-003 可用(我对数组很糟糕)。
【问题讨论】:
-
您可能会发现
Get-ADComputer的-filter参数很有用。 -
如果您无法处理这种基本操作,您将无法获得可行的解决方案。您的替代方法是尝试一次检索每个单独的数字,直到调用
Get-ADComputer失败。这是一种真的 糟糕的方法,而且扩展性不好。 -
另外,如果您想进一步解析数据,请勿使用
Format-*cmdlet 进行输出。 PowerShell 生成对象,而不是文本,当你有对象时,你可以检查它们的属性,并在检查后操作整个对象。 -
Sort-Objectcmdlet 将对这些名称进行整齐排序。抓住最后一个并在后缀中添加一个。 -
试试
(Get-ADComputer ... | Sort-Object Name)[-1]
标签: powershell active-directory