我有一个包含arround 100服务器的文本文件,我如何将它们推入脚本并测试它们是否存在于AD中?我在下面有一个简单的脚本:
$serverlist = get-content ServerList.txt
foreach ($server in $serverlist) {
if (Get-ADComputer $serverlist ) {
Write-Host "#########################"
Write-Host "Computer object exists"
Write-Host "#########################"
}
else {
Write-Host "#########################"
Write-Host "Computer object NOT FOUND"
Write-Host "#########################"
}
} 以上不起作用返回错误:
Get-ADComputer:无法将'System.Object []'转换为参数'Identity'所需的'Microsoft.ActiveDirectory.Management.ADComputer'类型。不支持指定的方法。
有人可以解释一下get-adcomputer只允许一个对象吗?此外,如果我删除txt文件并添加如下所示的服务器:
if (Get-ADComputer "server name" )
如果服务器存在于AD中,以上仅提供结果,如果服务器没有,则错误如下所示:
Get-ADComputer : Cannot find an object with identity: 'iuiub' under: 'DC=####,DC=#####,DC=#####'
感谢您的任何见解/帮助!
菲尔
答案 0 :(得分:2)
第3行,将$ serverlist更改为$ server
关于处理未找到的结果。我试着翻转逻辑:
$serverlist = get-content ServerList.txt
foreach ($server in $serverlist) {
$tempVar = Get-ADComputer $server
if ($tempVar -like "Get-ADComputer : Cannot find an object with identity" ) {
Write-Host "#########################"
Write-Host "Computer object NOT FOUND"
Write-Host "#########################"
}
else{
Write-Host "#########################"
Write-Host "Computer object exists"
Write-Host "#########################"
}
}
答案 1 :(得分:2)
创建一个数组 - @()
。如果数组中有一个或多个对象 - $true
- 那么您就知道计算机存在。如果数组中有0个对象 - $false
- 那么您就知道计算机不存在。我知道有些人不喜欢将ErrorAction
设置为SilentlyContinue
,但如果发生错误,则为"Outputting an Error"。
$serverlist = get-content ServerList.txt
foreach ($server in $serverlist) {
if (@(Get-ADComputer $server -ErrorAction SilentlyContinue).Count) {
Write-Host "#########################"
Write-Host "Computer object exists"
Write-Host "#########################"
}
else {
Write-Host "#########################"
Write-Host "Computer object NOT FOUND"
Write-Host "#########################"
}
}
您可以尝试的另一件事是try catch
块。像这样排序:
$serverlist = get-content ServerList.txt
foreach ($server in $serverlist) {
try{
Get-ADComputer $server -ErrorAction Stop
Write-Host "#########################"
Write-Host "Computer object exists"
Write-Host "#########################"
}
catch{
Write-Host "#########################"
Write-Host "Computer object NOT FOUND"
Write-Host "#########################"
}
}
答案 2 :(得分:0)
为了获得更有用的输出,我将使用以下内容...您将只有一条绿色和红色线条的列表,指示找到了哪个服务器,而没有找到哪个服务器。
$serverlist = get-content ServerList.txt
foreach ($server in $serverlist) {
try {
Get-ADComputer $server -ErrorAction Stop | Out-Null
Write-Host "$($server) exists" -ForegroundColor DarkGreen
}
catch {
Write-Host "$($server) NOT FOUND" -ForegroundColor DarkRed
}
}