我目前正在将所有 Windows 2012R2 和 2016 服务器升级到 2019。我想运行一个 Powershell cmdlet,它将获取域中所有已启动并运行这些操作系统的计算机以及它们的主机名和 IP 地址。我过去曾使用过 Get-Computer,并获得了一长串已关闭的服务器列表,这些服务器可能使用了错误的参数,但是我希望得到更清晰、更具体的内容。
答案1
以下是构建符合特定过滤器的在线计算机列表的示例命令:
Get-AdComputer -Filter {OperatingSystem -like 'Windows Server*' -and DNSHostName -like '*' -and Enabled -eq $true} -SearchBase "OU=Servers,DC=Contoso,DC=com" -Properties operatingSystem | Sort-Object DNSHostName | ForEach-Object { if(Test-Connection -ComputerName $_.DNSHostName -Count 1 -Quiet){$Computers += @($_.DNSHostName);Write-Output "$($_.DNSHostName) is available and added to the array"} else {Write-Warning "$($_.DNSHostName) is unreachable"}}
然后,您可以使用生成的 $Computers 数组针对这些计算机运行其他命令:
Invoke-Command -ComputerName $Computers -ScriptBlock {Get-Service -Name Spooler | Select-Object DisplayName,Name,StartType,Status -ErrorAction SilentlyContinue} | Format-Table PSComputerName,DisplayName,Name,StartType,Status