1

最近我开始自己学习Powershell。这是一个艰难的 2 周和大量的阅读,但我越来越好。我在工作中遇到了一些压力来帮助纠正我们的 CMDB。我们距离建立真正的分解/资产管理系统还有大约 7 个月的时间。我们现在有很多理由依赖 Powershell,我们正试图在进入管理系统之前收拾烂摊子。无论如何,我创建了一个脚本,它可以为我们获取大量信息。我们有大约 3000 个对象/件,我们需要尽可能多的信息。无论如何,我创建了一个脚本。到目前为止,它运作良好,但我想从专家那里得到一些意见或任何建议。我觉得我只用了 2 周的经验就完成了一项体面的工作,但我真的很想知道其他人的想法。

我注意到一件事:带有 IE9 和 Up 的 Windows 7 Box 不返回 IE 版本的值。有谁知道为什么?

请在下面查看我的代码:

    Set-QADPSSnapinSettings -defaultSizeLimit 0


    $FullPCList = (Get-QADComputer -SearchRoot $ou | Sort Name | select  -expand name)

    foreach ($computer in $FullPCList) {
    ping -n 2 $computer >$null
    if($lastexitcode -eq 0) { $Online = "Yes" } else { $Online = "No" }
    $PCInfo = (Get-WmiObject -ComputerName $computer -Class Win32_ComputerSystem -ErrorAction SilentlyContinue)
    $WinInfo = (Get-WmiObject -ComputerName $computer -Class Win32_OperatingSystem -ErrorAction SilentlyContinue)
    $ram = ((Get-WmiObject -ComputerName $computer -Class Win32_PhysicalMemory -ErrorAction SilentlyContinue | Measure-Object Capacity -Sum).Sum / 1MB)
    $bios = (Get-WmiObject -ComputerName $computer -Class Win32_Bios -ErrorAction SilentlyContinue)
    $ie = (Get-Wmiobject -ComputerName $computer -namespace “root\CIMV2\Applications\MicrosoftIE” -query “select version from MicrosoftIE_Summary” -ErrorAction SilentlyContinue)
    $freespace = ((Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk | Select Freespace | Measure-object Freespace -Sum).Sum / 1GB)


    #Start uptime check
    $LastBootUpTime = $WinInfo.ConvertToDateTime($WinInfo.LastBootUpTime)
    $Time = (Get-Date) - $LastBootUpTime
    $formattime = '{0:00}:{1:00}:{2:00}' -f $Time.Days, $Time.Hours, $Time.Minutes
    #End Uptime Check

          if ($WinInfo.Caption -match "Windows 7") {
                $name  = (Get-ChildItem -Path "\\$Computer\C$\Users" -Exclude "*Service*","*admin*","*Public*","*ffodero*","*jgalli*","*jwalters*","*frochet*" | Sort-Object LastAccessTime -Descending | Select-Object Name -First 1).Name
                $loggedintime     = (Get-ChildItem -Path "\\$Computer\C$\Users" -Exclude "*Service*","*admin*","*Public*","*ffodero*","*jgalli*" | Sort-Object LastAccessTime -Descending | Select-Object LastAccessTime -First 1).LastAccessTime
          }
          if ($WinInfo.Caption -match "Windows XP") {
                      $name                   = (Get-ChildItem -Path "\\$Computer\C$\Documents and Settings" -Exclude "*Service*","*admin*","*Public*" | Sort-Object LastAccessTime -Descending | Select-Object Name -First 1).Name
                      $loggedintime     = (Get-ChildItem -Path "\\$Computer\C$\Documents and Settings" -Exclude "*Service*","*admin*","*Public*" | Sort-Object LastAccessTime -Descending | Select-Object LastAccessTime -First 1).LastAccessTime
          }

    $table = @{
          Model = $PCInfo.Model
          IEVersion = $ie.Version
          Serial = $Bios.SerialNumber
          Memory = $ram
          DriveFreeSpaceGB = $freespace
          Manufacturer = $PCInfo.Manufacturer
          OSName = $WinInfo.Caption
          Computer = $computer
          Uptime = $formattime
          LastloggedinUser = $name
          LastLoggedinDate = $loggedintime
          LoggedOnDuringScan = $PCInfo.Username
          ServicePack = $WinInfo.ServicePackMajorVersion
          Online = $Online
                }
          New-Object PSObject -Property $table | Export-Csv C:\logs\mother.csv -NoTypeInformation -Append
    } 
4

1 回答 1

1

从 Windows Vista 开始,命名空间root\CIMV2\Applications\MicrosoftIE已被删除(请参阅博文末尾的注释)。不过,您应该能够从注册表中读取版本号:

$hive = [UInt32]'0x80000002'
$key  = 'SOFTWARE\Microsoft\Internet Explorer'

$reg = [WMIClass]"\\$computer\root\default:StdRegProv"
$ieVersion = $reg.GetStringValue($hive, $key, 'Version').sValue
于 2013-08-30T10:16:08.207 回答