Refactored and fixed mobile devices bug

This commit is contained in:
Zachary Gorman 2024-09-13 16:32:38 -07:00
parent 649ed498b5
commit ddd1f02fed
7 changed files with 330 additions and 668 deletions

View file

@ -12,7 +12,7 @@
RootModule = 'Get-PC.psm1' RootModule = 'Get-PC.psm1'
# Version number of this module. # Version number of this module.
ModuleVersion = '0.4.7' ModuleVersion = '0.4.8'
# Supported PSEditions # Supported PSEditions
# CompatiblePSEditions = @() # CompatiblePSEditions = @()

View file

@ -5,369 +5,6 @@ function Get-PCBatchInvoke {
[string[]] [string[]]
$Computers $Computers
) )
$Tenant = (Connect-ISM)[1]
$Headers = (Connect-ISM)[0]
#Region Script Block
$sblock = {
Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 10
try {$win32_networkadapterconfiguration = Get-CimInstance -Class win32_networkadapterconfiguration} catch {$win32_networkadapterconfiguration = $null} #| MAC Address,
try {$win32_LogicalDisk = Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" } catch {$win32_LogicalDisk = $null} #| Diskspace,
try {$win32_SystemEnclosure = Get-CimInstance -ClassName Win32_SystemEnclosure} catch {$win32_SystemEnclosure = $null} #| Asset Tag
Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 20
try {$bitlocker = manage-bde -status C:} catch {$bitlocker = $null} # | Bitlocker Status
try {$PCInfo = get-computerinfo} catch {$PCInfo = $null}
Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 30
try {$physicalDisk = Get-PhysicalDisk} catch {$physicalDisk = $null} # | Disk Type
try {$win32_printer = (Get-CimInstance -ClassName win32_printer | Where-Object {$_.PortName -ne 'PORTPROMPT:' -and $_.PortName -ne 'nul:' -and $_.PortName -ne 'SHRFAX:'} | Select-Object -ExpandProperty Name) -join ' || ' }
catch{ $win32_printer = $null} # | Printers
try {$imprivataRegEntry = Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\SSOProvider\ISXAgent} catch {$imprivataRegEntry = $null}
Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 40
try {$kioskRegEntry = Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\SHSCustom} catch {$kioskRegEntry = $null}
try {$win32_tpm = Get-CimInstance -Namespace root\cimv2\security\microsofttpm -Class win32_tpm} catch{$win32_tpm = $null} # | TPM
$gpoPath = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\FVE\MDOPBitLockerManagement"
$gpoValue = Get-ItemPropertyValue -Path $gpoPath -Name "KeyRecoveryServiceEndPoint"
Switch($GpoValue -eq "https://shsmbam1.int.samhealth.net/MBAMRecoveryAndHardwareService/CoreService.svc")
{
$true {$gpoStatus = "GPO Applied"}
$false {$gpoStatus = "GPO Not Applied (Check if system is member of group MBAM_Default on ADUC"}
Default {$gpoStatus = "Error...GPOTEST Line PCRemote Line 276"}
}
Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 50
$CitrixViewer = "C:\Program Files (X86)\Citrix\ICA Client\CDViewer.exe"
#$LastUser = Get-ChildItem -Path C:\Users -Directory -Force -Exclude Public,Default,'Default User','All Users' | Sort-Object -Property LastWriteTime -Descending | Select-Object -First 3 # | Last Users
try {$CPU = (Get-CimInstance -ClassName Win32_processor ).Name } catch {$CPU = $null}
#MAC Address
$MAC = ($win32_networkadapterconfiguration | Where-Object {$_.IpEnabled -Match "True"} | Select-Object -Expand macaddress) -join ","
#IP
$ip = ($win32_networkadapterconfiguration | Where-Object {$_.IpEnabled -Match "True"} | Select-Object -Expand IPAddress)
if($ip -is [array]){
$ip = $ip[0]
}
#Adapter
$adapter = ($win32_networkadapterconfiguration | Where-Object {$_.IpEnabled -Match "True"} | Select-Object -Expand Description)
<#
if($adapter -is [array]){
$adapter = $adapter[0]
}
#>
#UserName
$Username = $PCInfo.CSUserName
if($null -eq $Username){
$Username = (Invoke-Command -SessionOption (New-PSSessionOption -NoMachineProfile) -ScriptBlock {Get-Process Explorer -IncludeUsername | Where-Object { $_.Username -notlike "*SYSTEM" }} ).Username
if($null -ne $Username){
$Username = "$Username (RDP/Inactive)"
}
else{
$Username = '**None**'
}
}
#Collecting most recent users from the registry
$lastuser = @()
$profiles = Get-CimInstance -Class Win32_UserProfile
$profiles | Where-Object {$_.SID.length -gt 10} | Foreach-Object {
$sid = $_.SID
$prop = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$sid\"
if($prop.LocalProfileUnLoadTimeHigh -and $prop.LocalProfileUnLoadTimeLow){
$a = '{0:x}' -f $prop.LocalProfileUnLoadTimeHigh
$b = '{0:x}' -f $prop.LocalProfileUnLoadTimeLow
$dec = [bigint]::Parse("$a$b",'AllowHexSpecifier')
$time = w32tm /ntte $dec
$lastTime = [datetime]($time -split ' - ')[1]
}
else{
$lastTime = "Unknown"
}
$obj = [PSCustomObject]@{
Name = ($_.LocalPath -split 'C:\\Users\\')[1]
LocalPath = $_.LocalPath
LastLoginTime = $lastTime
}
$lastuser += $obj
}
$lastuser = $lastuser | Where-Object LastLoginTime -ne 'Unknown' | Sort-Object LastLoginTime -Descending
#Last User
if($lastUser.Count -gt 1){
$lastUser1 = ($lastUser[0].Name + " (" + $lastUser[0].LastLoginTime + ")")
$lastUser2 = ($lastUser[1].Name + " (" + $lastUser[1].LastLoginTime + ")")
$lastUser3 = ($lastUser[2].Name + " (" + $lastUser[2].LastLoginTime + ")")
$TotalLastUsers = "$lastUser1 $lastUser2 $lastUser3"
}else{
$TotalLastUsers = $lastUser.Name + " (" + $lastUser.LastLoginTime + ")"
}
#ComputerModel
$Model = $PCInfo.CsModel
#RAM
$totalram = $PCInfo.CsTotalPhysicalMemory
$totalram = [math]::Round(($totalram / 1GB))
$ram = "$totalram GB"
#Drive Type
$DriveType = $physicalDisk.MediaType
Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 60
#Free Harddrive Space
$CompFreeSpace = @([math]::Round($win32_LogicalDisk.FreeSpace / 1gb,2),[math]::Round($win32_LogicalDisk.Size / 1gb,2))
$free = $compFreeSpace[0]
$max = $compfreeSpace[1]
$freespace = "$free GB / $max GB"
#Service Tag
#$serviceTag = $win32_bios.SerialNumber
$serviceTag = $PCInfo.BiosSeralNumber
#BIOS
#$biosVersion = $win32_bios.SMBIOSBIOSVersion
$biosVersion = $PCInfo.BiosName
#Last Reboot
$lastbootTime = $PCInfo.OsLastBootUpTime
#Asset Tag
$assetTag = $win32_SystemEnclosure.SMBiosAssetTag
#Bitlocker Status
$PercentageEncrypted = (($bitlocker | Select-String "Percentage Encrypted") -split ': ')[1]
[int]$IntPercentageEncrypted = $PercentageEncrypted.Substring(0,4)
$EncryptionStatus = $null
If($bitlocker -like '*error*')
{
$EncryptionStatus = 'BitLocker - Error - Please investigate'
}
Elseif($IntPercentageEncrypted -eq 100)
{
$EncryptionStatus = "BitLocker - Encrypted ($PercentageEncrypted)"
}
ElseIf($IntPercentageEncrypted -gt 1)
{
$EncryptionStatus = "BitLocker - Encrypting ($PercentageEncrypted)"
}
Else
{
$EncryptionStatus = "BitLocker - Decrypted ($PercentageEncrypted)"
}
#OS
$os = $PCInfo.OSName + " (" + $PCInfo.OSArchitecture + ")"
#OS Build
$osVer = $PCInfo.WindowsVersion
if($osVer -gt 2004){
$osVer = (Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion").DisplayVersion
}
$osBuild = $PCInfo.OSBuildNumber
$osBuild = "Vers $osVer | Build #$osBuild"
Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 70
#Printers
$printers = $win32_printer# ($win32_printer | Where-Object {$_.PortName -ne 'PORTPROMPT:' -and $_.PortName -ne 'nul:' -and $_.PortName -ne 'SHRFAX:'} | Select-Object -ExpandProperty Name) -join ' || '
if(!$printers){
$printers = "No Local/Networked Printer (Check Printer Mappings)"
}
#Imprivata
$ImprivataType = $imprivataRegEntry | Select-Object -ExpandProperty Type
if(!$imprivataType){
$ImprivataType = "Not Installed"
}
else{
Switch($ImprivataType){
1 {
$ImprivataType = $imprivataRegEntry | Select-Object -ExpandProperty FUS_Enabled
Switch($ImprivataType){
0 {$ImprivataType = "SUD"}
1 {$ImprivataType = "MUD"}
}
}
2 {$ImprivataType = "Kiosk"}
Default {$ImprivataType = "Not Installed"}
}
}
$kioskRole = try {$kioskRegEntry | Select-Object -ExpandProperty KioskRole} catch{ $null }
if (!$kioskRole) { $kioskRole = "None"}
#TPM
if($win32_tpm){
$tpmVersion = " | Vers " + $win32_tpm.ManufacturerVersionFull20
$tpmStatus = "On"
if($win32_tpm.IsActivated_InitialValue){
$tpmStatus += ", Activated"
}
else{
$tpmStatus += ", Not Activated"
}
if($win32_tpm.IsEnabled_InitialValue){
$tpmStatus += ", Enabled"
}
else {
$tpmStatus += ", Disabled"
}
if($win32_tpm.IsOwned_InitialValue){
$tpmStatus += ", Owned"
}
else{
$tpmStatus += ", Not Owned"
}
$tpmStatus += $tpmVersion
}
else {
$tpmStatus = "Off"
}
Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 80
#Citrix Version
if( !(Test-path $CitrixViewer)){
$CitrixVersion = "Not Installed"
}
else{
#Checks this default install path
$CitrixVersion = Get-Command $citrixViewer | select-object -ExpandProperty Version #Grabs Citrix version number
}
#Chassis Type
Switch -Wildcard($Model) {
"Optiplex*" {
Switch -Wildcard($CPU)
{
"Intel(R) Core(TM) i5-9500 CPU*" {$chassisType = "SFF"} #5070
"Intel(R) Core(TM) i5-6500 CPU*" {$chassisType = "SFF"} #7040
"Intel(R) Core(TM) i5-6500T*" {$chassisType = "Micro"} #7040
"Intel(R) Core(TM) i7-6700 CPU*" {$chassisType = "SFF"} #7040
"Intel(R) Core(TM) i7-6700T*" {$chassisType = "Micro"} #7040
"Intel(R) Core(TM) i5-10500T*" {$chassisType = "Micro"} #5080
"Intel(R) Core(TM) i5-9500T*" {$chassisType = "Micro"} #5070
"Intel(R) Core(TM) i5-8500 CPU*" {$chassisType = "SFF"} #5060
"Intel(R) Core(TM) i5-8500T*" {$chassisType = "Micro"} #5060
"Intel(R) Core(TM) i5-7500*" {$chassisType = "SFF"} #5050
"Intel(R) Core(TM) i5-4670 CPU*" {$chassisType = "SFF"} #9020
"Intel(R) Core(TM) i5-4590 CPU*" {$chassisType = "SFF"} #9020
"Intel(R) Core(TM) i5-4590T CPU*" {$chassisType = "Micro"} #9020M
"Intel(R) Core(TM) i5-4690 CPU*" {$chassisType = "SFF"} #9020
"Intel(R) Core(TM) i5-3550 CPU*" {$chassisType = "SFF"} #9010
"Intel(R) Core(TM) i5-2400 CPU*" {$chassisType = "SFF"} #990
Default {$chassisType = "Optiplex - Chassis Type - Unknown"}
}
}
"Latitude*" {
$chassisType = "Laptop"
}
"Precision*"{
$chassisType = "Laptop"
}
"M24*" {
$chassisType = "Anesthesia Cart"
}
"Medix*"{
$chassisType = "Anesthesia Cart"
}
Default {$chassisType = "Unknown Model/Chassis"}
}
Write-Progress -Activity "Retrieving data from online computers" -Status "$Env:COMPUTERNAME | Querying Spark!... Timeout 100s" -PercentComplete 90
$uri = "${using:Tenant}/api/odata/businessobject/cis`?`$filter=Name eq '$ENV:COMPUTERNAME'&`$top=1&`$skip=0"
try {
$Query = Invoke-RestMethod -Method GET -uri $uri -headers ${using:Headers} -TimeoutSec 100
} catch {
Write-Host $_.Exception.Message
}
$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 ' | '
Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 90
#Output
# $i++ | ProgressBar $i $comp 'Generating Output' $NumberofComputers $PCID
$obj = New-Object -TypeName PSObject
$obj | Add-Member -MemberType NoteProperty -Name 'Hostname' -Value $Env:COMPUTERNAME
$obj | Add-Member -MemberType NoteProperty -Name 'Status' -Value "Online"
$obj | Add-Member -MemberType NoteProperty -Name 'Current User' -Value "$userName"
$obj | Add-Member -MemberType NoteProperty -Name 'Last User(s)' -Value "$TotalLastUsers"
$obj | Add-Member -MemberType NoteProperty -Name 'IP | MAC' -Value "$ip | $mac"
$obj | Add-Member -MemberType NoteProperty -Name 'Adapter' -Value "$adapter"
$obj | Add-Member -MemberType NoteProperty -Name 'Model' -Value "$Model ($chassisType)"
$obj | Add-Member -MemberType NoteProperty -Name 'OS' -Value $os
$obj | Add-Member -MemberType NoteProperty -Name 'OS Build' -Value $osBuild
$obj | Add-Member -MemberType NoteProperty -Name 'BIOS Ver' -Value "$biosVersion"
$obj | Add-Member -MemberType NoteProperty -Name 'Encryption' -Value "$EncryptionStatus"
$obj | Add-Member -MemberType NoteProperty -Name 'Free Space' -Value "$freespace | $driveType"
$obj | Add-Member -MemberType NoteProperty -Name 'RAM' -Value "$ram"
$obj | Add-Member -MemberType NoteProperty -Name 'SSO Client' -Value "$imprivataType"
$obj | Add-Member -MemberType NoteProperty -Name 'Kiosk Role' -Value "$kioskRole"
$obj | Add-Member -MemberType NoteProperty -Name 'Citrix Ver' -Value "$citrixVersion"
$obj | Add-Member -MemberType NoteProperty -Name 'Asset Tag' -Value "$assetTag"
$obj | Add-Member -MemberType NoteProperty -Name 'Service Tag' -Value "$serviceTag"
$obj | Add-Member -MemberType NoteProperty -Name 'Last Reboot' -Value "$lastbootTime"
$obj | Add-Member -MemberType NoteProperty -Name 'TPM Status' -Value "$tpmStatus"
$obj | Add-Member -MemberType NoteProperty -Name 'MBAM GPO' -Value "$gpostatus"
$obj | Add-Member -MemberType NoteProperty -Name 'Printers' -Value "$printers"
$obj | Add-Member -MemberType NoteProperty -Name 'CMDB Location' -Value "$LocationData"
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
}
#endregion
$OnlineComputers = @() $OnlineComputers = @()
$OfflineComputers = @() $OfflineComputers = @()
$output = @() $output = @()
@ -384,7 +21,7 @@ function Get-PCBatchInvoke {
} }
} }
BatchInvokesProgressBar -stage 2 BatchInvokesProgressBar -stage 2
$invokeJob = Invoke-Command -ScriptBlock $sblock -ComputerName $OnlineComputers -SessionOption (New-PSSessionOption -NoMachineProfile -OpenTimeout 45000) -AsJob $invokeJob = Invoke-Command -ScriptBlock ${function:Get-PCLocal} -ComputerName $OnlineComputers -SessionOption (New-PSSessionOption -NoMachineProfile -OpenTimeout 45000) -AsJob
$offlineJobs = @() $offlineJobs = @()
if($OfflineComputers.count -gt 0){ if($OfflineComputers.count -gt 0){
foreach($computer in $OfflineComputers){ foreach($computer in $OfflineComputers){
@ -418,32 +55,6 @@ function Get-PCBatchInvoke {
} }
Function Get-CMDBLocation {
[CmdletBinding()]
param (
[Parameter()]
$cmdb
)
if($null -eq $cmdb){
$location = "*CMDB Mismatch - check CMDB*"
return $location
}
if($cmdb.values._SHSCalcLocationString.length -gt $cmdb.values._SHSLocation3.length){
$location = $cmdb.values._SHSCalcLocationString
}
else{
$location = $cmdb.values._SHSLocation3
}
if($null -eq $location -or '' -eq $location){
$location = "*No location data - Please update CMDB*"
}
return $location
}
function BatchInvokesProgressBar { function BatchInvokesProgressBar {
param ( param (
$item, $item,
@ -453,8 +64,8 @@ function BatchInvokesProgressBar {
) )
switch ($stage) { switch ($stage) {
1 { Write-Progress -Activity "Connecting to computers" -Status "$item ($currentItemIndex/$TotalItems)" -PercentComplete (($currentItemIndex/$TotalItems) * 100)} 1 { Write-Progress -Activity "Connecting to computers" -Status "$item ($currentItemIndex/$TotalItems)" -PercentComplete (($currentItemIndex/$TotalItems) * 100)}
2 { Write-Progress -Activity "Spinning up jobs" -PercentComplete ((20/100) * 100)} 2 { Write-Progress -Activity "Spinning up jobs" -PercentComplete ((10/100) * 100)}
3 { Write-Progress -Activity "Awaiting Online Jobs" -PercentComplete ((60/100)*100)} 3 { Write-Progress -Activity "Querying online computers" -PercentComplete ((20/100)*100)}
4 { Write-Progress -Activity "Querying SCCM for offline computers" -PercentComplete ((75/100) * 100)} 4 { Write-Progress -Activity "Querying SCCM for offline computers" -PercentComplete ((75/100) * 100)}
5 { Write-Progress -Activity "Querying CMDB for computers not in SCCM" -PercentComplete ((75/100) * 100)} 5 { Write-Progress -Activity "Querying CMDB for computers not in SCCM" -PercentComplete ((75/100) * 100)}
Default {} Default {}

View file

@ -56,7 +56,7 @@ function Get-CMDBFallback {
# } # }
if($cmdbData.CIType -eq 'MobileDevice'){ if($cmdbData.CIType -eq 'MobileDevice'){
$cmdbData = Get-ISMBO -bo ci__mobiledevicess -RecID $cmdbData.RecId $cmdbData = Get-ISMBO -bo ci__mobiledevices -RecID $cmdbData.RecId
# $props = [Ordered]@{ # $props = [Ordered]@{
# Hostname = $cmdbData.Title # Hostname = $cmdbData.Title

View file

@ -56,6 +56,15 @@ function Get-Hostname ([string]$name) {
else { $errMsg += "CMDB name associated with Asset tag $name doesn't resolve to IP Address"} else { $errMsg += "CMDB name associated with Asset tag $name doesn't resolve to IP Address"}
} else { $errMsg += "Asset tag not in CMDB" } } else { $errMsg += "Asset tag not in CMDB" }
} }
if ($name -match "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$") {
try {
$cmdbData = Search-ISMBO -bo cis -Filter "MACAddress eq '$name'" -RawFilter
} catch { $cmdbData = $null }
if ( $cmdbData ) {
if (Resolve-DnsName $cmdbData.Name) { return $cmdbData.Name,'' }
else { $errMsg += "CMDB name associated with MAC Address $name doesn't resolve to IP Address"}
} else { $errMsg += "MAC Address not in CMDB" }
}
# Serial number # Serial number
try { try {
$cmdbData = Search-ISMBO -bo cis -Filter "SerialNumber eq '$name'" -RawFilter $cmdbData = Search-ISMBO -bo cis -Filter "SerialNumber eq '$name'" -RawFilter

View file

@ -1,278 +1,216 @@
function Get-PCLocal { function Get-PCLocal {
param ( # Spark connection params
[string]$comp, $Tenant = 'https://samaritanhealth-amc.ivanticloud.com'
[int]$NumberofComputers, $Headers = @{
[int]$PCID "Content-Type" = "application/json"
) "Authorization" = 'rest_api_key=EB68123D62F8489295C807353C92D75B'
$i = 0 "Accept" = "*/*"
$i++ | ProgressBar $i $comp "ipV4" $NumberofComputers $PCID "Accept-Encoding" = "gzip, deflate, br"
$ipV4 = Get-PCIPAddress $comp }
$i++ | ProgressBar $i $comp "MAC" $NumberofComputers $PCID
$mac = Get-PCMACAddress $comp
$i++ | ProgressBar $i $comp "Adapter" $NumberofComputers $PCID
$adapter = Get-PCAdapter $comp
$i++ | ProgressBar $i $comp "Usernames" $NumberofComputers $PCID
$userName = Get-PCUserName $comp
$i++ | ProgressBar $i $comp "Computer Model" $NumberofComputers $PCID
$compModel = Get-PCCompModel $comp
$i++ | ProgressBar $i $comp "RAM Size" $NumberofComputers $PCID
$compMemory = Get-PCCompMemory $comp
$i++ | ProgressBar $i $comp "CPU Type" $NumberofComputers $PCID
$compCPU = Get-CPUTypeLocal
$i++ | ProgressBar $i $comp "HDD/SSD Space" $NumberofComputers $PCID
$compFreeSpace = Get-PCCompFreeSpace $comp
$i++ | ProgressBar $i $comp "Service Tag" $NumberofComputers $PCID
$compServiceTag = Get-PCCompServiceTag $comp
$i++ | ProgressBar $i $comp "Bios Version" $NumberofComputers $PCID
$compBiosVersion = Get-PCCompBiosVersion $comp
$i++ | ProgressBar $i $comp "Last Boot Time" $NumberofComputers $PCID
$compLastBootUpTime = Get-PCCompLastBootUpTime $comp
$i++ | ProgressBar $i $comp "Asset Tag" $NumberofComputers $PCID
$compAssetTag = Get-PCCompAssetTag $comp
$i++ | ProgressBar $i $comp "Encryption" $NumberofComputers $PCID
$hasBitLocker = Get-PCHasBitLocker $comp
$i++ | ProgressBar $i $comp "OS Version" $NumberofComputers $PCID
$compOSVersion = Get-PCCompOSVersion $comp
$i++ | ProgressBar $i $comp "OS Architecture" $NumberofComputers $PCID
$compArchitectureBuild = Get-PCCompArchitectureBuild $comp
$i++ | ProgressBar $i $comp "OS Build #" $NumberofComputers $PCID
$compOSBuildNumber = Get-PCCompOSBuildNumber $comp
$i++ | ProgressBar $i $comp "Drive Type" $NumberofComputers $PCID
$driveType = Get-PCDriveType $comp
$i++ | ProgressBar $i $comp "Citrix Version" $NumberofComputers $PCID
$citrixVersion = Get-PCCitrixVersion $comp
$i++ | ProgressBar $i $comp "Chassis Type" $NumberofComputers $PCID
$chassisType = Get-ChassisType $compCPU $compModel
$i++ | ProgressBar $i $comp " Local Last User" $NumberofComputers $PCID Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 10
$lastUser = Get-LastLoginTimes try {$win32_networkadapterconfiguration = Get-CimInstance -Class win32_networkadapterconfiguration} catch {$win32_networkadapterconfiguration = $null} #| MAC Address,
$i++ | ProgressBar $i $comp "Local Imprivata" $NumberofComputers $PCID try {$win32_LogicalDisk = Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" } catch {$win32_LogicalDisk = $null} #| Diskspace,
$imprivataType = Get-PCImprivataTypeLocal try {$win32_SystemEnclosure = Get-CimInstance -ClassName Win32_SystemEnclosure} catch {$win32_SystemEnclosure = $null} #| Asset Tag
$i++ | ProgressBar $i $comp "Local Kiosk Role" $NumberofComputers $PCID Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 20
$kioskRole = Get-PCKioskRoleLocal try {$bitlocker = manage-bde -status C:} catch {$bitlocker = $null} # | Bitlocker Status
$i++ | ProgressBar $i $comp "Local Kiosk Type" $NumberofComputers $PCID try {$PCInfo = get-computerinfo} catch {$PCInfo = $null}
$kioskType = Get-PCKioskTypeLocal Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 30
$i++ | ProgressBar $i $comp "Local ReleaseID" $NumberofComputers $PCID try {$physicalDisk = Get-PhysicalDisk} catch {$physicalDisk = $null} # | Disk Type
$releaseID = PCReleaseIDLocal try {$win32_printer = (Get-CimInstance -ClassName win32_printer | Where-Object {$_.PortName -ne 'PORTPROMPT:' -and $_.PortName -ne 'nul:' -and $_.PortName -ne 'SHRFAX:'} | Select-Object -ExpandProperty Name) -join ' || ' }
$i++ | ProgressBar $i $comp "Local Printers" $NumberofComputers $PCID catch{ $win32_printer = $null} # | Printers
$getPrinter = Get-PCPrinterLocal try {$imprivataRegEntry = Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\SSOProvider\ISXAgent} catch {$imprivataRegEntry = $null}
#$i++ | ProgressBar $i $comp "Time Stamp" $NumberofComputers $PCID Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 40
#$lastUserTimeStamp = Get-PCLastUserTimestampLocal try {$kioskRegEntry = Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\SHSCustom} catch {$kioskRegEntry = $null}
$i++ | ProgressBar $i $comp "GPO Status" $NumberofComputers $PCID try {$win32_tpm = Get-CimInstance -Namespace root\cimv2\security\microsofttpm -Class win32_tpm} catch{$win32_tpm = $null} # | TPM
$getGPOStatus = Get-GPOStatusLocal
$i++ | ProgressBar $i $comp "TPM Status" $NumberofComputers $PCID
$tpmStatus = Get-TPMStatusLocal
<#
$gpoPath = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\FVE\MDOPBitLockerManagement"
$gpoValue = Get-ItemPropertyValue -Path $gpoPath -Name "KeyRecoveryServiceEndPoint"
Switch($GpoValue -eq "https://shsmbam1.int.samhealth.net/MBAMRecoveryAndHardwareService/CoreService.svc")
{
$true {$gpoStatus = "GPO Applied"}
$false {$gpoStatus = "GPO Not Applied (Check if system is member of group MBAM_Default on ADUC"}
Default {$gpoStatus = "Error...GPOTEST Line PCRemote Line 276"}
}
#>
Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 50
$CitrixViewer = "C:\Program Files (X86)\Citrix\ICA Client\CDViewer.exe"
#$LastUser = Get-ChildItem -Path C:\Users -Directory -Force -Exclude Public,Default,'Default User','All Users' | Sort-Object -Property LastWriteTime -Descending | Select-Object -First 3 # | Last Users
try {$CPU = (Get-CimInstance -ClassName Win32_processor ).Name } catch {$CPU = $null}
#MAC Address
$MAC = ($win32_networkadapterconfiguration | Where-Object {$_.IpEnabled -Match "True"} | Select-Object -Expand macaddress) -join ","
#IP
$ip = ($win32_networkadapterconfiguration | Where-Object {$_.IpEnabled -Match "True"} | Select-Object -Expand IPAddress) -join ","
<#
if($ip -is [array]){
$ip = $ip[0]
}
#>
#Adapter
$adapter = ($win32_networkadapterconfiguration | Where-Object {$_.IpEnabled -Match "True"} | Select-Object -Expand Description) -join " | "
<#
if($adapter -is [array]){
$adapter = $adapter[0]
}
#>
#UserName
$Username = $PCInfo.CSUserName
if($null -eq $Username){
$Username = (Invoke-Command -SessionOption (New-PSSessionOption -NoMachineProfile) -ScriptBlock {Get-Process Explorer -IncludeUsername | Where-Object { $_.Username -notlike "*SYSTEM" }} ).Username
if($null -ne $Username){
$Username = "$Username (RDP/Inactive)"
}
else{
$Username = '**None**'
}
}
Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 60
#Collecting most recent users from the registry
$lastuser = @()
$profiles = Get-CimInstance -Class Win32_UserProfile
$profiles | Where-Object {$_.SID.length -gt 10} | Foreach-Object {
$sid = $_.SID
$prop = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$sid\"
if($prop.LocalProfileUnLoadTimeHigh -and $prop.LocalProfileUnLoadTimeLow){
$a = '{0:x}' -f $prop.LocalProfileUnLoadTimeHigh
$b = '{0:x}' -f $prop.LocalProfileUnLoadTimeLow
$dec = [bigint]::Parse("$a$b",'AllowHexSpecifier')
$time = w32tm /ntte $dec
$lastTime = [datetime]($time -split ' - ')[1]
}
else{
$lastTime = "Unknown"
}
$obj = [PSCustomObject]@{
Name = ($_.LocalPath -split 'C:\\Users\\')[1]
LocalPath = $_.LocalPath
LastLoginTime = $lastTime
}
$lastuser += $obj
}
$lastuser = $lastuser | Where-Object LastLoginTime -ne 'Unknown' | Sort-Object LastLoginTime -Descending
#Last User
if($lastUser.Count -gt 1){ if($lastUser.Count -gt 1){
$lastUser1 = ($lastUser[0].Name + "-(" + $lastUser[0].LastLoginTime + ")").Split("-") $lastUser1 = ($lastUser[0].Name + " (" + $lastUser[0].LastLoginTime + ")")
$lastUser2 = ($lastUser[1].Name + "-(" + $lastUser[1].LastLoginTime + ")").Split("-") $lastUser2 = ($lastUser[1].Name + " (" + $lastUser[1].LastLoginTime + ")")
$lastUser3 = ($lastUser[2].Name + "-(" + $lastUser[2].LastLoginTime + ")").Split("-") $lastUser3 = ($lastUser[2].Name + " (" + $lastUser[2].LastLoginTime + ")")
$TotalLastUsers = "$lastUser1 $lastUser2 $lastUser3" $TotalLastUsers = "$lastUser1 $lastUser2 $lastUser3"
}else{ }else{
$TotalLastUsers = $lastuser.Name + "( " + $lastuser.LastLoginTime + " )" $TotalLastUsers = $lastUser.Name + " (" + $lastUser.LastLoginTime + ")"
} }
if($compOSVersion -ne "Microsoft Windows 10 Enterprise"){ #ComputerModel
$Model = $PCInfo.CsModel
$driveType = "(Drive Type: Unavailable on Win 7)" #RAM
} $totalram = $PCInfo.CsTotalPhysicalMemory
$totalram = [math]::Round(($totalram / 1GB))
$ram = "$totalram GB"
Switch($kioskType) #Drive Type
{ $DriveType = $physicalDisk.MediaType
1 {} Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 70
2 {$imprivataType = "Kiosk"} #Free Harddrive Space
} $CompFreeSpace = @([math]::Round($win32_LogicalDisk.FreeSpace / 1gb,2),[math]::Round($win32_LogicalDisk.Size / 1gb,2))
$free = $compFreeSpace[0]
$max = $compfreeSpace[1]
$freespace = "$free GB / $max GB"
if($imprivataType -eq "Kiosk" -and $getPrinter -ne '') #Checks if PC is a Kiosk with a locally/networked installed Printer
{
$getPrinter = $getPrinter + " (Check Epic Printer Mappings)"
}
elseif($imprivataType -eq "Kiosk" -and !$getPrinter) #Checks if PC is a Kiosk and does not have a locally/networked installed Printer
{
$getPrinter = "Check Epic Printer Mappings"
}
elseif(!$getPrinter)
{
$getPrinter = "No Local/Networked Printer (Check Printer Mappings)"
}
if(!$kioskRole) #Service Tag
{ #$serviceTag = $win32_bios.SerialNumber
$kioskRole = "N/A" $serviceTag = $PCInfo.BiosSeralNumber
} #BIOS
#$biosVersion = $win32_bios.SMBIOSBIOSVersion
$biosVersion = $PCInfo.BiosName
if(!$userName) #Last Reboot
{ $lastbootTime = $PCInfo.OsLastBootUpTime
$userName = "**None**"
}
if(!$compAssetTag) #Asset Tag
{ $assetTag = $win32_SystemEnclosure.SMBiosAssetTag
$compAssetTag = "(N/A in SMBios)"
}
$compFreeSpaceGB = [math]::Round(($compFreeSpace[0] / 1GB),2)
$compFreeSpaceMB = [math]::Round(($compFreeSpace / 1MB))
$compMemory = [math]::Round(($compMemory / 1GB))
$compFreeSpaceMB = "$compFreeSpaceMB" + ' MB'
$compFreeSpaceGB = "$compFreeSpaceGB" + ' GB'
$compMemory = "$compMemory" + ' GB'
$locationData = Get-LocationDetails $comp
$i++ | ProgressBar $i $comp "Generating Output" $NumberofComputers $PCID
$props = [Ordered]@{
Hostname = "$comp"
Status = "Online"
'Current User' = "$userName"
'Last User(s)' = "$TotalLastUsers"
'IP | MAC' = "$ipV4 | $mac"
'Adapter' = "$adapter"
Model = "$compModel ($chassisType)"
'OS' = "$compOSVersion" + " ($compArchitectureBuild)"
'OS Build' = "Vers #$releaseID |" + " Build #$compOSBuildNumber"
'BIOS Ver' = "$compBiosVersion"
Encryption = "$hasBitLocker"
'Free Space' = "$compFreeSpaceGB " + "/ " + $compfreeSpace[1] + " GB | $driveType"
'RAM' = "$compMemory"
'SSO Client' = "$imprivataType"
'Kiosk Role' = "$kioskRole"
'Citrix Ver' = "$citrixVersion"
'Asset Tag' = "$compAssetTag"
'Service Tag' = "$compServiceTag"
'Last Reboot' = "$compLastBootUpTime"
'TPM Status' = "$tpmStatus"
'MBAM GPO' = "$getGPOStatus"
Printers = "$getPrinter"
'CMDB Location' = $locationData
}
$obj = New-Object -TypeName PSObject -Property $props
if ($locationData) {
$obj | Add-Member -MemberType NoteProperty -Name 'CMDB Location' -Value $locationData
}
if ($delInfo) {
$obj | Add-Member -MemberType NoteProperty -Name 'DEL Owner' -Value $delInfo.Contact
$obj | Add-Member -MemberType NoteProperty -Name 'DEL Vendor PC' -Value $delInfo.Vendor
$obj | Add-Member -MemberType NoteProperty -Name 'DEL Description' -Value $delInfo.Description
}
return $obj
}
#Region Local Only Helper Functions
<# Function Get-PCLastUserLocal(){
$LastUser = Get-ChildItem -Path C:\Users -Directory -Force -Exclude Public,Default,'Default User','All Users' |
Sort-Object -Property LastWriteTime -Descending | Select-Object -First 3 -ExpandProperty Name
Return $LastUser
} #>
<# Function Get-PCLastUserTimestampLocal(){
$LastUserTimeStamp = Get-ChildItem -Path C:\Users -Directory -Force -Exclude Public,Default,'Default User','All Users' |
Sort-Object -Property LastWriteTime -Descending | Select-Object -First 3 -ExpandProperty LastWriteTime
Return $LastUserTimeStamp
} #>
Function Get-PCImprivataTypeLocal(){
$ImprivataType = Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\SSOProvider\ISXAgent |
Select-Object -ExpandProperty FUS_Enabled
Switch($ImprivataType)
{
0 {$ImprivataType = "SUD"}
1 {$ImprivataType = "MUD"}
Default {$ImprivataType = "Imprivata Agent not Installed"}
}
Return $ImprivataType
}
Function Get-PCKioskRoleLocal(){
$KioskRole = Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\SHSCustom | Select-Object -ExpandProperty KioskRole
Return $KioskRole
}
Function Get-PCKioskTypeLocal(){
$KioskType = Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\SSOProvider\ISXAgent | Select-Object -ExpandProperty Type
Return $KioskType
}
Function Get-PCReleaseIDLocal(){
$ReleaseID = (Get-Item "HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion").GetValue('ReleaseID')
if($ReleaseID -gt 2004){
$ReleaseID = (Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion").DisplayVersion
}
Return $ReleaseID
}
Function Get-PCHasBitLockerLocal(){
$bitlocker = manage-bde -status C:
$PercentageEncrypted = ((manage-bde -status C: | Select-String "Percentage Encrypted") -split ': ')[1]
#Bitlocker Status
$PercentageEncrypted = (($bitlocker | Select-String "Percentage Encrypted") -split ': ')[1]
[int]$IntPercentageEncrypted = $PercentageEncrypted.Substring(0,4) [int]$IntPercentageEncrypted = $PercentageEncrypted.Substring(0,4)
$EncryptionStatus = $null
If($bitlocker -like '*error*') If($bitlocker -like '*error*')
{ {
$EncryptionStatus = 'BitLocker - Error - Please investigate' $EncryptionStatus = 'BitLocker - Error - Please investigate'
Return $EncryptionStatus
} }
Elseif($IntPercentageEncrypted -eq 100) Elseif($IntPercentageEncrypted -eq 100)
{ {
$EncryptionStatus = "BitLocker - Encrypted ($PercentageEncrypted)" $EncryptionStatus = "BitLocker - Encrypted ($PercentageEncrypted)"
Return $EncryptionStatus
} }
ElseIf($IntPercentageEncrypted -gt 1) ElseIf($IntPercentageEncrypted -gt 1)
{ {
$EncryptionStatus = "BitLocker - Encrypting ($PercentageEncrypted)" $EncryptionStatus = "BitLocker - Encrypting ($PercentageEncrypted)"
Return $EncryptionStatus
} }
Else Else
{ {
$EncryptionStatus = "BitLocker - Decrypted ($PercentageEncrypted)" $EncryptionStatus = "BitLocker - Decrypted ($PercentageEncrypted)"
Return $EncryptionStatus
}
} }
Function Get-PCPrinterLocal(){ #OS
$os = $PCInfo.OSName + " (" + $PCInfo.OSArchitecture + ")"
$GetPrinter = (Get-CimInstance -Class Win32_Printer | #OS Build
Where-Object -Property PortName -ne nul: | $osVer = $PCInfo.WindowsVersion
Where-Object -Property PortName -ne PORTPROMPT: | if($osVer -gt 2004){
Where-Object -Property PortName -ne SHRFAX: | $osVer = (Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion").DisplayVersion
Select-Object -ExpandProperty Name) -join ' || ' }
$osBuild = $PCInfo.OSBuildNumber
Return $GetPrinter $osBuild = "Vers $osVer | Build #$osBuild"
Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 80
#Printers
$printers = $win32_printer# ($win32_printer | Where-Object {$_.PortName -ne 'PORTPROMPT:' -and $_.PortName -ne 'nul:' -and $_.PortName -ne 'SHRFAX:'} | Select-Object -ExpandProperty Name) -join ' || '
if(!$printers){
$printers = "No Local/Networked Printer (Check Printer Mappings)"
} }
Function Get-TPMStatusLocal(){ #Imprivata
$ImprivataType = $imprivataRegEntry | Select-Object -ExpandProperty Type
if(!$imprivataType){
$ImprivataType = "Not Installed"
}
else{
Switch($ImprivataType){
1 {
$ImprivataType = $imprivataRegEntry | Select-Object -ExpandProperty FUS_Enabled
Switch($ImprivataType){
0 {$ImprivataType = "SUD"}
1 {$ImprivataType = "MUD"}
}
}
2 {$ImprivataType = "Kiosk"}
Default {$ImprivataType = "Not Installed"}
}
}
$kioskRole = try {$kioskRegEntry | Select-Object -ExpandProperty KioskRole} catch{ $null }
if (!$kioskRole) { $kioskRole = "None"}
#TPM #TPM
$win32_tpm = Get-CimInstance -Namespace root\cimv2\security\microsofttpm -Class win32_tpm
if($win32_tpm){ if($win32_tpm){
$tpmStatus = "On"
$tpmVersion = " | Vers " + $win32_tpm.ManufacturerVersionFull20 $tpmVersion = " | Vers " + $win32_tpm.ManufacturerVersionFull20
$tpmStatus = "On"
if($win32_tpm.IsActivated_InitialValue){ if($win32_tpm.IsActivated_InitialValue){
$tpmStatus += ", Activated" $tpmStatus += ", Activated"
} }
@ -297,37 +235,137 @@ Function Get-TPMStatusLocal(){
$tpmStatus = "Off" $tpmStatus = "Off"
} }
return $tpmStatus Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 90
#Citrix Version
if( !(Test-path $CitrixViewer)){
$CitrixVersion = "Not Installed"
}
else{
#Checks this default install path
$CitrixVersion = Get-Command $citrixViewer | select-object -ExpandProperty Version #Grabs Citrix version number
} }
Function Get-GPOStatusLocal(){ #Chassis Type
$gpoPath = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\FVE\MDOPBitLockerManagement" Switch -Wildcard($Model) {
$gpoValue = Get-ItemPropertyValue -Path $gpoPath -Name "KeyRecoveryServiceEndPoint" "Optiplex*" {
Switch -Wildcard($CPU)
Switch($gpoValue -eq "https://shsmbam1.int.samhealth.net/MBAMRecoveryAndHardwareService/CoreService.svc")
{ {
$true {Return "GPO Applied"} "Intel(R) Core(TM) i5-9500 CPU*" {$chassisType = "SFF"} #5070
$false {Return "GPO Not Applied"}
Default {Return "Error...GPOTEST Line PCLocal Line 129"} "Intel(R) Core(TM) i5-6500 CPU*" {$chassisType = "SFF"} #7040
"Intel(R) Core(TM) i5-6500T*" {$chassisType = "Micro"} #7040
"Intel(R) Core(TM) i7-6700 CPU*" {$chassisType = "SFF"} #7040
"Intel(R) Core(TM) i7-6700T*" {$chassisType = "Micro"} #7040
"Intel(R) Core(TM) i5-10500T*" {$chassisType = "Micro"} #5080
"Intel(R) Core(TM) i5-9500T*" {$chassisType = "Micro"} #5070
"Intel(R) Core(TM) i5-8500 CPU*" {$chassisType = "SFF"} #5060
"Intel(R) Core(TM) i5-8500T*" {$chassisType = "Micro"} #5060
"Intel(R) Core(TM) i5-7500*" {$chassisType = "SFF"} #5050
"Intel(R) Core(TM) i5-4670 CPU*" {$chassisType = "SFF"} #9020
"Intel(R) Core(TM) i5-4590 CPU*" {$chassisType = "SFF"} #9020
"Intel(R) Core(TM) i5-4590T CPU*" {$chassisType = "Micro"} #9020M
"Intel(R) Core(TM) i5-4690 CPU*" {$chassisType = "SFF"} #9020
"Intel(R) Core(TM) i5-3550 CPU*" {$chassisType = "SFF"} #9010
"Intel(R) Core(TM) i5-2400 CPU*" {$chassisType = "SFF"} #990
Default {$chassisType = "Optiplex - Chassis Type - Unknown"}
}
}
"Latitude*" {
$chassisType = "Laptop"
}
"Precision*"{
$chassisType = "Laptop"
}
"M24*" {
$chassisType = "Anesthesia Cart"
}
"Medix*"{
$chassisType = "Anesthesia Cart"
}
Default {$chassisType = "Unknown Model/Chassis"}
}
$timeout = 10
Write-Progress -Activity "Retrieving data from online computers" -Status "$Env:COMPUTERNAME | Querying Spark!... Timeout $($timeout)s" -PercentComplete 95
$uri = "$Tenant/api/odata/businessobject/cis`?`$filter=Name eq '$ENV:COMPUTERNAME'&`$top=1&`$skip=0"
try {
$Query = Invoke-RestMethod -Method GET -uri $uri -headers $Headers -TimeoutSec $timeout
} catch {
Write-Host $_.Exception.Message
}
$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
} }
} }
Function Get-CPUTypeLocal(){ $LocationData = $LocationData -join ' | '
$CPU = (Get-CimInstance -ClassName Win32_processor).Name Write-Progress -Activity "Retrieving data from online computers" -Status $Env:COMPUTERNAME -PercentComplete 100
#Output
# $i++ | ProgressBar $i $comp 'Generating Output' $NumberofComputers $PCID
$obj = New-Object -TypeName PSObject
Return $CPU $obj | Add-Member -MemberType NoteProperty -Name 'Hostname' -Value $Env:COMPUTERNAME
$obj | Add-Member -MemberType NoteProperty -Name 'Status' -Value "Online"
$obj | Add-Member -MemberType NoteProperty -Name 'Current User' -Value "$userName"
$obj | Add-Member -MemberType NoteProperty -Name 'Last User(s)' -Value "$TotalLastUsers"
$obj | Add-Member -MemberType NoteProperty -Name 'IP | MAC' -Value "$ip | $mac"
$obj | Add-Member -MemberType NoteProperty -Name 'Adapter' -Value "$adapter"
$obj | Add-Member -MemberType NoteProperty -Name 'Model' -Value "$Model ($chassisType)"
$obj | Add-Member -MemberType NoteProperty -Name 'OS' -Value "$os | $osBuild"
$obj | Add-Member -MemberType NoteProperty -Name 'BIOS Ver' -Value "$biosVersion"
$obj | Add-Member -MemberType NoteProperty -Name 'Encryption' -Value "$EncryptionStatus"
$obj | Add-Member -MemberType NoteProperty -Name 'Free Space' -Value "$freespace | $driveType"
$obj | Add-Member -MemberType NoteProperty -Name 'RAM' -Value "$ram"
$obj | Add-Member -MemberType NoteProperty -Name 'SSO Client' -Value "$imprivataType"
$obj | Add-Member -MemberType NoteProperty -Name 'Kiosk Role' -Value "$kioskRole"
$obj | Add-Member -MemberType NoteProperty -Name 'Citrix Ver' -Value "$citrixVersion"
$obj | Add-Member -MemberType NoteProperty -Name 'Asset Tag' -Value "$assetTag"
$obj | Add-Member -MemberType NoteProperty -Name 'Service Tag' -Value "$serviceTag"
$obj | Add-Member -MemberType NoteProperty -Name 'Last Reboot' -Value "$lastbootTime"
$obj | Add-Member -MemberType NoteProperty -Name 'TPM Status' -Value "$tpmStatus"
$obj | Add-Member -MemberType NoteProperty -Name 'Printers' -Value "$printers"
$obj | Add-Member -MemberType NoteProperty -Name 'CMDB Location' -Value "$LocationData"
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
} }
Function Get-CompModelLocal(){ return $obj
$CompModel = (Get-CimInstance -ClassName Win32_ComputerSystem).Model
Return $CompModel
} }
#endregion

View file

@ -358,9 +358,6 @@ Function Get-PC {
#grabs info on attached monitors and usb devices #grabs info on attached monitors and usb devices
if ($Devices) { if ($Devices) {
ProgressBar -CurrentPC $comp -NumberofComputers $NumberofComputers -Percent $PCID -CurrentLocationText 'Devices' -CurrentPCNumber $PCID
$PCID++
if ($compStatus -ne 'Online') { if ($compStatus -ne 'Online') {
Write-Warning "$comp is $compStatus skipping monitor query" Write-Warning "$comp is $compStatus skipping monitor query"
} }
@ -647,7 +644,7 @@ Function Get-PC {
} }
#This is the get-pc of get-pc. It collects all the data from the computers and puts it in an array to be outputed #This is the get-pc of get-pc. It collects all the data from the computers and puts it in an array to be outputed
$outPutArray += Get-PCBatchInvoke($getPCComputers) if ($getPCComputers) { $outPutArray += Get-PCBatchInvoke($getPCComputers) }
if ($Orion) { if ($Orion) {

View file

@ -1,4 +1,11 @@
Patch: Patch: 2024-09-13
-Fix Order of hostame resolution changed so it's more consistent with true hostname
-Remove MBAM GPO from output
-Refactor BatchInvokes uses Get-PCLocal so there is only one spot to update
-Fix shortened Spark! timeout since Spark! typically won't succeed after 5 seconds
-Fix bug when querying mobile devices
Patch: 2024-09-12
-Fix Hostnames now check SCCM for a hostname match as a fallback -Fix Hostnames now check SCCM for a hostname match as a fallback
-Fix Devices now reports correct ports on DELL P2422H monitor -Fix Devices now reports correct ports on DELL P2422H monitor
-Add DevicesUnplugged to report unplugged devices like scanners or printers -Add DevicesUnplugged to report unplugged devices like scanners or printers