304 lines
15 KiB
PowerShell
304 lines
15 KiB
PowerShell
|
|
Function Get-SCCMQueryBlock {
|
|
param (
|
|
[string]$comp,
|
|
[int]$PCID = 1
|
|
)
|
|
#CONST
|
|
$SITENAME="100"
|
|
$SCCMSERVER="shscm01.int.samhealth.net"
|
|
$SCCMNAMESPACE="root\sms\site_100"
|
|
|
|
if(!(Test-Connection -ComputerName $comp -Count 1)){
|
|
|
|
$compStatus = "Offline"
|
|
}
|
|
else{
|
|
$compStatus = "Online"
|
|
}
|
|
|
|
$progress = 5
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Checking if disabled in AD' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
if(get-module -ListAvailable -Name 'ActiveDirectory'){
|
|
try { $adTest = ((Get-ADComputer $comp).DistinguishedName -match "Disabled Computers") } catch { $adTest = $true }
|
|
if($adTest){
|
|
$compStatus += " (disabled or off the domain)"
|
|
}
|
|
}
|
|
|
|
$progress += 5
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Querying for Last Hardware Scan' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
|
|
#Last Hardware Scan
|
|
$FindLastHardwareScanQuery = "select SMS_G_System_WORKSTATION_STATUS.LastHardwareScan from SMS_R_System inner join SMS_G_System_WORKSTATION_STATUS on SMS_G_System_WORKSTATION_STATUS.ResourceID = SMS_R_System.ResourceId where SMS_R_System.Name = '$comp'"
|
|
|
|
$FindLastHardwareScanSCCM = Get-WmiObject -namespace $SCCMNAMESPACE -DirectRead -computer $SCCMSERVER -query $FindLastHardwareScanQuery | Select-Object -ExpandProperty LastHardwareScan
|
|
|
|
if(!$FindLastHardwareScanSCCM){
|
|
$props = [Ordered]@{
|
|
Hostname = "$comp"
|
|
Status = "$compStatus"
|
|
'Current User' = $null
|
|
'Last User(s)' = $null
|
|
'IP | MAC' = $null
|
|
Model = $null
|
|
'OS' = $null
|
|
'OS Build' = $null
|
|
'BIOS Ver' = $null
|
|
Encryption = $null
|
|
'Free Space' = $null
|
|
RAM = $null
|
|
'SSO Client' = $null
|
|
'Kiosk Role' = $null
|
|
'Asset Tag' = $null
|
|
'Service Tag' = $null
|
|
'Last Reboot' = $null
|
|
Printers = $null
|
|
}
|
|
|
|
$obj = New-Object -TypeName PSObject -Property $props
|
|
|
|
return $obj
|
|
}
|
|
|
|
$Year = $FindLastHardwareScanSCCM.substring(0,4)
|
|
$Month = $FindLastHardwareScanSCCM.substring(4,2)
|
|
$Day = $FindLastHardwareScanSCCM.substring(6,2)
|
|
|
|
$Hour = $FindLastHardwareScanSCCM.substring(8,2)
|
|
$Minute = $FindLastHardwareScanSCCM.substring(10,2)
|
|
$Second = $FindLastHardwareScanSCCM.substring(12,2)
|
|
|
|
$FindLastHardwareScanSCCM = "$Month/$Day/$Year $Hour" + ":" + "$Minute" + ":" + "$Second"
|
|
#End Last Hardware Scan
|
|
|
|
$progress += 10
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Querying for Last User Logon' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
$SCCMQuery = "select SMS_R_System.LastLogonUserName,SMS_R_System.IPAddresses,SMS_R_System.MACAddresses from SMS_R_System where SMS_R_System.Name = '$comp'"
|
|
$SCCMResults = Get-WmiObject -namespace $SCCMNAMESPACE -DirectRead -computer $SCCMSERVER -query $SCCMQuery
|
|
|
|
$LastUserSCCM = $SCCMResults | Select-Object -ExpandProperty LastLogonUserName
|
|
|
|
$FindIPSCCM = $SCCMResults | Select-Object -ExpandProperty IPAddresses
|
|
if($FindIPSCCM.Count -gt 1){
|
|
$FindIPSCCM = $FindIPSCCM[0]
|
|
}
|
|
|
|
$FindMacAddressSCCM = $SCCMResults | Select-Object -ExpandProperty MACAddresses
|
|
$FindMacAddressSCCM = if($FindMacAddressSCCM.Count -gt 1){
|
|
$FindMacAddressSCCM[0]
|
|
}
|
|
|
|
$progress += 10
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Querying for Model' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
$FindModelQuery = "select SMS_G_System_COMPUTER_SYSTEM.Model from SMS_R_System inner join SMS_G_System_COMPUTER_SYSTEM on
|
|
SMS_G_System_COMPUTER_SYSTEM.ResourceId = SMS_R_System.ResourceId where SMS_R_System.Name = '$comp'"
|
|
$CompModelSCCM = Get-WmiObject -namespace $SCCMNAMESPACE -DirectRead -computer $SCCMSERVER -query $FindModelQuery |
|
|
Select-Object -ExpandProperty Model
|
|
|
|
$progress += 5
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Querying for Bios Version' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
$FindBiosVerQuery = "select SMS_G_System_PC_BIOS.SMBIOSBIOSVersion from SMS_R_System inner join SMS_G_System_PC_BIOS on
|
|
SMS_G_System_PC_BIOS.ResourceId = SMS_R_System.ResourceId where SMS_R_System.Name = '$comp'"
|
|
$FindBiosVerSCCM = Get-WmiObject -namespace $SCCMNAMESPACE -DirectRead -computer $SCCMSERVER -query $FindBiosVerQuery |
|
|
Select-Object -ExpandProperty SMBIOSBIOSVersion
|
|
|
|
$progress += 5
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Querying for HDD/SSD space' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
$FindFreeSpaceQuery = "select SMS_G_System_LOGICAL_DISK.Size from SMS_R_System inner join SMS_G_System_LOGICAL_DISK on
|
|
SMS_G_System_LOGICAL_DISK.ResourceID = SMS_R_System.ResourceId where SMS_R_System.Name = '$comp'"
|
|
$CompFreeSpaceSCCM = Get-WmiObject -namespace $SCCMNAMESPACE -DirectRead -computer $SCCMSERVER -query $FindFreeSpaceQuery |
|
|
Select-Object -ExpandProperty Size
|
|
$CompFreeSpaceSCCMGB = [math]::Round(($CompFreeSpaceSCCM / 1000), 2)
|
|
|
|
$progress += 5
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Querying for RAM' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
$FindMemoryQuery = "select SMS_G_System_X86_PC_MEMORY.TotalPhysicalMemory from SMS_R_System inner join SMS_G_System_X86_PC_MEMORY on
|
|
SMS_G_System_X86_PC_MEMORY.ResourceID = SMS_R_System.ResourceId where SMS_R_System.Name = '$comp'"
|
|
$FindMemorySCCM = Get-WmiObject -namespace $SCCMNAMESPACE -DirectRead -computer $SCCMSERVER -query $FindMemoryQuery |
|
|
Select-Object -ExpandProperty TotalPhysicalMemory
|
|
$FindMemorySCCMGB = [math]::Round($FindMemorySCCM / 1MB)
|
|
|
|
$progress += 10
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Querying for Asset Tag' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
$SCCMQuery = "select SMS_G_System_SYSTEM_ENCLOSURE.SMBIOSAssetTag, SMS_G_System_SYSTEM_ENCLOSURE.SerialNumber from SMS_R_System inner join SMS_G_System_SYSTEM_ENCLOSURE on
|
|
SMS_G_System_SYSTEM_ENCLOSURE.ResourceId = SMS_R_System.ResourceId inner join SMS_G_System_SYSTEM on SMS_G_System_SYSTEM.ResourceId = SMS_R_System.ResourceId where SMS_G_System_SYSTEM.Name = '$comp'"
|
|
$SCCMResults = Get-WmiObject -namespace $SCCMNAMESPACE -DirectRead -computer $SCCMSERVER -query $SCCMQuery
|
|
$FindAssetTagSCCM = $SCCMResults | Select-Object -ExpandProperty SMBIOSAssetTag
|
|
$FindServiceTagSCCM = $SCCMResults | Select-Object -ExpandProperty SerialNumber
|
|
|
|
$progress += 10
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Querying for OS Name' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
$SCCMQuery = "select SMS_G_System_OPERATING_SYSTEM.Caption, SMS_G_System_OPERATING_SYSTEM.OSArchitecture, SMS_G_System_OPERATING_SYSTEM.BuildNumber,SMS_G_System_OPERATING_SYSTEM.LastBootUpTime
|
|
from SMS_R_System inner join SMS_G_System_OPERATING_SYSTEM
|
|
on SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId where SMS_R_System.Name = '$comp'"
|
|
$SCCMResults = Get-WmiObject -namespace $SCCMNAMESPACE -DirectRead -computer $SCCMSERVER -query $SCCMQuery
|
|
$FindOSNameSCCM = $SCCMResults | Select-Object -ExpandProperty Caption
|
|
$FindOSArchSCCM = $SCCMResults | Select-Object -ExpandProperty OSArchitecture
|
|
$FindOSBuild = $SCCMResults | Select-Object -ExpandProperty BuildNumber
|
|
$FindLastBootUpTimeSCCM = $SCCMResults | Select-Object -ExpandProperty LastBootUpTime
|
|
if($null -ne $FindLastBootUpTimeSCCM){
|
|
$Year = $FindLastBootUpTimeSCCM.substring(0,4)
|
|
$Month = $FindLastBootUpTimeSCCM.substring(4,2)
|
|
$Day = $FindLastBootUpTimeSCCM.substring(6,2)
|
|
$Hour = $FindLastBootUpTimeSCCM.substring(8,2)
|
|
$Minute = $FindLastBootUpTimeSCCM.substring(10,2)
|
|
$Second = $FindLastBootUpTimeSCCM.substring(12,2)
|
|
$FindLastBootUpTimeSCCM = "$Month/$Day/$Year $Hour" + ":" + "$Minute" + ":" + "$Second"
|
|
}
|
|
|
|
$progress += 10
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Querying for Encryption' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
$FindEncryptionQuery = "select SMS_G_System_ENCRYPTABLE_VOLUME.ProtectionStatus from SMS_R_System inner join SMS_G_System_ENCRYPTABLE_VOLUME on
|
|
SMS_G_System_ENCRYPTABLE_VOLUME.ResourceId = SMS_R_System.ResourceId where SMS_R_System.Name = '$comp'"
|
|
$FindEncryptionSCCM = Get-WmiObject -namespace $SCCMNAMESPACE -DirectRead -computer $SCCMSERVER -query $FindEncryptionQuery |
|
|
Select-Object -ExpandProperty ProtectionStatus
|
|
Switch($FindEncryptionSCCM){
|
|
0{$FindEncryptionSCCM = "BitLocker (Disabled)"}
|
|
1{$FindEncryptionSCCM = "BitLocker (Enabled [Unlocked])"}
|
|
2{$FindEncryptionSCCM = "BitLocker (Enabled [Locked])"}
|
|
Default{$FindEncryptionSCCM = "Encryption Not Found"}
|
|
}
|
|
|
|
$progress += 5
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Querying for Printers' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
$FindPCPrinterQuery = "select SMS_G_System_PRINTER_DEVICE.Name, SMS_G_System_PRINTER_DEVICE.PortName from SMS_R_System inner join SMS_G_System_PRINTER_DEVICE
|
|
on SMS_G_System_PRINTER_DEVICE.ResourceID = SMS_R_System.ResourceId where SMS_R_System.Name = '$comp'"
|
|
$FindPCPrinterSCCM = (Get-WmiObject -namespace $SCCMNAMESPACE -DirectRead -computer $SCCMSERVER -query $FindPCPrinterQuery |
|
|
Where-Object -Property PortName -ne nul: |
|
|
Where-Object -Property PortName -ne PORTPROMPT: |
|
|
Where-Object -Property PortName -ne SHRFAX: | Select-Object -ExpandProperty Name) -join ' || '
|
|
|
|
$progress += 10
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Querying for Chassis Type' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
$FindProcessorQuery = "select SMS_G_System_PROCESSOR.Name from SMS_R_System inner join SMS_G_System_PROCESSOR on SMS_G_System_PROCESSOR.ResourceId = SMS_R_System.ResourceId inner join SMS_G_System_SYSTEM on
|
|
SMS_G_System_SYSTEM.ResourceId = SMS_R_System.ResourceId where SMS_G_System_SYSTEM.Name = '$comp'"
|
|
$FindProcessorSCCM = Get-WmiObject -namespace $SCCMNAMESPACE -DirectRead -computer $SCCMSERVER -query $FindProcessorQuery | Select-Object -ExpandProperty Name
|
|
$FindChassisTypeSCCM = Switch -Wildcard($CompModelSCCM){
|
|
"Optiplex*" {
|
|
Switch -Wildcard($FindProcessorSCCM){
|
|
"Intel(R) Core(TM) i5-9500 CPU*" {"SFF"} #5070
|
|
|
|
"Intel(R) Core(TM) i5-6500 CPU*" {"SFF"} #7040
|
|
|
|
"Intel(R) Core(TM) i5-6500T*" {"Micro"} #7040
|
|
|
|
"Intel(R) Core(TM) i7-6700 CPU*" {"SFF"} #7040
|
|
|
|
"Intel(R) Core(TM) i7-6700T*" {"Micro"} #7040
|
|
|
|
"Intel(R) Core(TM) i5-9500T*" {"Micro"} #5070
|
|
|
|
"Intel(R) Core(TM) i5-8500 CPU*" {"SFF"} #5060
|
|
|
|
"Intel(R) Core(TM) i5-8500T*" {"Micro"} #5060
|
|
|
|
"Intel(R) Core(TM) i5-7500*" {"SFF"} #5050
|
|
|
|
"Intel(R) Core(TM) i5-4670 CPU*" {"SFF"} #9020
|
|
|
|
"Intel(R) Core(TM) i5-4590 CPU*" {"SFF"} #9020
|
|
|
|
"Intel(R) Core(TM) i5-4590T CPU*" {"Micro"} #9020M
|
|
|
|
"Intel(R) Core(TM) i5-4690 CPU*" {"SFF"} #9020
|
|
|
|
"Intel(R) Core(TM) i5-3550 CPU*" {"SFF"} #9010
|
|
|
|
"Intel(R) Core(TM) i5-2400 CPU*" {"SFF"} #990
|
|
|
|
Default {"Optiplex - Chassis Type - Unknown"}
|
|
}
|
|
|
|
}
|
|
|
|
"Latitude*" {"Laptop"}
|
|
"Precision*"{"Laptop"}
|
|
"M24*" {"Anesthesia Cart"}
|
|
"Medix*"{"Anesthesia Cart"}
|
|
|
|
Default {"Unknown Model/Chassis"}
|
|
}
|
|
|
|
if($FindAssetTagSCCM -is [array]){
|
|
Write-Warning "Dupe record in SCCM - $comp"
|
|
$FindAssetTagSCCM = $FindAssetTagSCCM[0]
|
|
<#Get-CMDBFallback $comp#>
|
|
}
|
|
|
|
<#$cmdbData = Get-CMDBData $comp $FindAssetTagSCCM
|
|
$MDBLcmdblocation = Get-Cocation $cmdbData
|
|
#>
|
|
|
|
$progress += 5
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Status 'Querying for CMDB data' -PercentComplete $progress -ParentID 0 -Id $PCID
|
|
|
|
$timeout = if ($SparkQueryTimeoutSec) {$SparkQueryTimeoutSec} else {5}
|
|
$uri = "${using:Tenant}/api/odata/businessobject/cis`?`$filter=Name eq '$comp'&`$top=1&`$skip=0"
|
|
try {
|
|
$Query = Invoke-RestMethod -Method GET -uri $uri -headers ${using:Headers} -TimeoutSec $timeout
|
|
} catch {
|
|
#Write-Host $_.Exception.Message
|
|
Write-Warning "Failed querying Spark!"
|
|
}
|
|
$cmdbData = $Query.Value
|
|
|
|
$LocationConstructors = @(
|
|
"SHS_AssetLocality",
|
|
"ivnt_Location",
|
|
"SHS_Floor",
|
|
"SHS_Department",
|
|
"SHS_LocationDetails"
|
|
)
|
|
|
|
$LocationData = Foreach($Loc in $LocationConstructors){
|
|
|
|
if ($Loc -eq 'SHS_Floor'){
|
|
$(if ($cmdbData.$Loc -match '-'){$cmdbData.$Loc.split('-')[-1] + " Floor"} else{$cmdbData.$Loc})
|
|
} elseif (![string]::IsNullOrEmpty($cmdbData.$Loc)){
|
|
$cmdbData.$Loc
|
|
}
|
|
}
|
|
|
|
$LocationData = $LocationData -join ' | '
|
|
|
|
if($FindLastHardwareScanSCCM){
|
|
Write-Host "`n`nPulling cached SCCM data for $comp." -ForegroundColor Yellow
|
|
Write-Host "Last Hardware Scan Time: $FindLastHardwareScanSCCM" -ForegroundColor Yellow
|
|
}
|
|
|
|
Write-Progress -Activity "Getting SCCM data for $comp" -Completed
|
|
|
|
$props = [Ordered]@{
|
|
Hostname = "$comp"
|
|
Status = "$compStatus"
|
|
'Current User' = "Not Available"
|
|
'Last User(s)' = "$LastUserSCCM"
|
|
'IP | MAC' = "$FindIPSCCM | $FindMACAddressSCCM"
|
|
Model = "$CompModelSCCM ($FindChassisTypeSCCM)"
|
|
'OS' = "$FindOSNameSCCM" + " ($FindOSArchSCCM)"
|
|
'OS Build' = "Build #$FindOSBuild"
|
|
'BIOS Ver' = "$FindBiosVerSCCM"
|
|
Encryption = "$FindEncryptionSCCM"
|
|
'Free Space' = "$CompFreeSpaceSCCMGB" + " GB"
|
|
RAM = "$FindMemorySCCMGB" + " GB "
|
|
'SSO Client' = "Not Available"
|
|
'Kiosk Role' = "Not Available"
|
|
'Asset Tag' = "$FindAssetTagSCCM"
|
|
'Service Tag' = "$FindServiceTagSCCM"
|
|
'Last Reboot' = "$FindLastBootUpTimeSCCM"
|
|
Printers = "$FindPCPrinterSCCM"
|
|
'CMDB Location' = "$LocationData"
|
|
'CMDB Status' = $cmdbData.Status
|
|
}
|
|
|
|
$obj = New-Object -TypeName PSObject -Property $props
|
|
if($cmdbData.SHS_IsException -eq 'True'){
|
|
Write-host "***NOTICE: $ENV:COMPUTERNAME is a Device Exception computer. Please check CMDB/Asset Mgmt prior to supporting this workstation. ***" -BackgroundColor Black -ForegroundColor Yellow
|
|
$obj | Add-Member -MemberType NoteProperty -Name 'DEL Owner' -Value $cmdbData.SHS_ExceptionContact
|
|
$obj | Add-Member -MemberType NoteProperty -Name 'DEL Vendor PC' -Value $cmdbData.SHS_IsVendorPC
|
|
$obj | Add-Member -MemberType NoteProperty -Name 'DEL Description' -Value $cmdbData.SHS_ExceptionNotes
|
|
}
|
|
return $obj
|
|
}
|