我正在编写用于服务器硬件清单的脚本。
从AD中可以获得所有Windows计算机的列表,然后丢弃虚拟机。我注意到某些虚拟机的Get-WmiObject
cmdlet响应时间非常长。有什么方法可以设置cmdlet的响应时间?
Clear-Host
Import-Module activedirectory
$file = "$env:TEMP\psw.txt"
Read-Host "Enter Password" -AsSecureString | ConvertFrom-SecureString | Out-File $file
$cred = (New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $env:USERNAME, (Get-Content $file | ConvertTo-SecureString))
function Get-Hosts {
$DaysAgo = (Get-Date).AddDays(-0)
[string[]]$ComputerName = (Get-ADComputer -Filter {(OperatingSystem -Like "Windows Server*") -and ((PwdLastSet -lt $DaysAgo) -or (LastLogonTimeSTamp -lt $DaysAgo))}).Name
[string[]]$Hosts = $null
$vm = 'Virtual Machine', 'VMware Virtual Platform', 'VirtualBox', 'HVM domU'
For ($i = 0; $i -lt $ComputerName.count; $i++) {
$Computer = $null
$Computer = $ComputerName[$i]
try {
if ($null -ne (Test-Connection $Computer -Count 1 -ErrorAction Ignore)) {
$ComputerSystemInfo = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $Computer -Credential $cred -ErrorAction Stop
if ($ComputerSystemInfo.Model -notin $vm) {
$Computer
}
}
} catch [System.UnauthorizedAccessException] {
continue
} catch [Exception] {
continue
}
}
}
Get-Hosts