2024-06-11 18:27:55 +00:00
function Get-PCLocal {
2024-09-13 23:32:38 +00:00
# Spark connection params
$Tenant = 'https://samaritanhealth-amc.ivanticloud.com'
$Headers = @ {
" Content-Type " = " application/json "
" Authorization " = 'rest_api_key=EB68123D62F8489295C807353C92D75B'
" Accept " = " */* "
" Accept-Encoding " = " gzip, deflate, br "
2024-06-11 18:27:55 +00:00
}
2024-09-18 18:15:13 +00:00
Write-Progress -Activity " Retrieving data from $Env:COMPUTERNAME " -Status " Network Adapters, Storage Disks, and Chassis " -PercentComplete 10
2024-09-13 23:32:38 +00:00
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
2024-09-18 18:15:13 +00:00
Write-Progress -Activity " Retrieving data from $Env:COMPUTERNAME " -Status " Bitlocker, Current User, RAM, Serial Number, and OS Version " -PercentComplete 20
2024-09-13 23:32:38 +00:00
try { $bitlocker = manage-bde -status C: } catch { $bitlocker = $null } # | Bitlocker Status
try { $PCInfo = get-computerinfo } catch { $PCInfo = $null }
2024-09-18 18:15:13 +00:00
Write-Progress -Activity " Retrieving data from $Env:COMPUTERNAME " -Status " Printers, Imprivata, and Stoarge Disk Type " -PercentComplete 30
2024-09-13 23:32:38 +00:00
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
2024-09-18 18:15:13 +00:00
Write-Progress -Activity " Retrieving data from $Env:COMPUTERNAME " -Status " Kiosk Type and TPM status " -PercentComplete 40
2024-09-13 23:32:38 +00:00
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 "
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
Switch ( $GpoValue -eq " https://shsmbam1.int.samhealth.net/MBAMRecoveryAndHardwareService/CoreService.svc " )
2024-06-11 18:27:55 +00:00
{
2024-09-13 23:32:38 +00:00
$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 " }
2024-06-11 18:27:55 +00:00
}
2024-09-13 23:32:38 +00:00
#>
2024-09-18 18:15:13 +00:00
Write-Progress -Activity " Retrieving data from $Env:COMPUTERNAME " -Status " Citrix Version, CPU Type, and Parsing Network Data " -PercentComplete 50
2024-09-13 23:32:38 +00:00
$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 }
2024-06-11 18:27:55 +00:00
2024-08-02 19:03:04 +00:00
2024-09-13 23:32:38 +00:00
#MAC Address
$MAC = ( $win32_networkadapterconfiguration | Where-Object { $_ . IpEnabled -Match " True " } | Select-Object -Expand macaddress ) -join " , "
2024-09-04 22:55:01 +00:00
2024-09-13 23:32:38 +00:00
#IP
2024-09-16 20:32:28 +00:00
$ip = ( $win32_networkadapterconfiguration | Where-Object { $_ . IpEnabled -Match " True " } | Select-Object -Expand IPAddress |
# IPv4 address filter
Where-Object { $_ -match " ^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4} $ " }
) -join " , "
2024-09-13 23:32:38 +00:00
<#
if ( $ip -is [ array ] ) {
$ip = $ip [ 0 ]
2024-06-11 18:27:55 +00:00
}
2024-09-13 23:32:38 +00:00
#>
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
#Adapter
$adapter = ( $win32_networkadapterconfiguration | Where-Object { $_ . IpEnabled -Match " True " } | Select-Object -Expand Description ) -join " | "
<#
if ( $adapter -is [ array ] ) {
$adapter = $adapter [ 0 ]
2024-08-02 19:03:04 +00:00
}
2024-09-13 23:32:38 +00:00
#>
#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**'
}
}
2024-09-18 18:15:13 +00:00
Write-Progress -Activity " Retrieving data from $Env:COMPUTERNAME " -Status " Parsing Last Users and Total RAM " -PercentComplete 60
2024-09-13 23:32:38 +00:00
#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 "
}
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
$obj = [ PSCustomObject ] @ {
Name = ( $_ . LocalPath -split 'C:\\Users\\' ) [ 1 ]
LocalPath = $_ . LocalPath
LastLoginTime = $lastTime
}
$lastuser + = $obj
2024-06-11 18:27:55 +00:00
}
2024-09-13 23:32:38 +00:00
$lastuser = $lastuser | Where-Object LastLoginTime -ne 'Unknown' | Sort-Object LastLoginTime -Descending
#Last User
if ( $lastUser . Count -gt 1 ) {
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
$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 {
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
$TotalLastUsers = $lastUser . Name + " ( " + $lastUser . LastLoginTime + " ) "
}
#ComputerModel
$Model = $PCInfo . CsModel
#RAM
$totalram = $PCInfo . CsTotalPhysicalMemory
$totalram = [ math ] :: Round ( ( $totalram / 1 GB ) )
$ram = " $totalram GB "
#Drive Type
$DriveType = $physicalDisk . MediaType
2024-09-18 18:15:13 +00:00
Write-Progress -Activity " Retrieving data from $Env:COMPUTERNAME " -Status " Parsing Disk Usage and Computer Info " -PercentComplete 70
2024-09-13 23:32:38 +00:00
#Free Harddrive Space
$CompFreeSpace = @ ( [ math ] :: Round ( $win32_LogicalDisk . FreeSpace / 1 gb , 2 ) , [ math ] :: Round ( $win32_LogicalDisk . Size / 1 gb , 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 ]
2024-06-11 18:27:55 +00:00
[ int ] $IntPercentageEncrypted = $PercentageEncrypted . Substring ( 0 , 4 )
2024-09-13 23:32:38 +00:00
$EncryptionStatus = $null
2024-06-11 18:27:55 +00:00
If ( $bitlocker -like '*error*' )
{
$EncryptionStatus = 'BitLocker - Error - Please investigate'
}
Elseif ( $IntPercentageEncrypted -eq 100 )
{
2024-09-13 23:32:38 +00:00
$EncryptionStatus = " BitLocker - Encrypted ( $PercentageEncrypted ) "
2024-06-11 18:27:55 +00:00
}
ElseIf ( $IntPercentageEncrypted -gt 1 )
{
$EncryptionStatus = " BitLocker - Encrypting ( $PercentageEncrypted ) "
}
Else
{
$EncryptionStatus = " BitLocker - Decrypted ( $PercentageEncrypted ) "
}
2024-09-13 23:32:38 +00:00
#OS
$os = $PCInfo . OSName + " ( " + $PCInfo . OSArchitecture + " ) "
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
#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 "
2024-09-18 18:15:13 +00:00
Write-Progress -Activity " Retrieving data from $Env:COMPUTERNAME " -Status " Parsing Printers, Imprivata type, and TPM status " -PercentComplete 80
2024-09-13 23:32:38 +00:00
#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) "
}
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
#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 " }
2024-06-11 18:27:55 +00:00
#TPM
if ( $win32_tpm ) {
2024-09-13 23:32:38 +00:00
$tpmVersion = " | Vers " + $win32_tpm . ManufacturerVersionFull20
2024-06-11 18:27:55 +00:00
$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 "
}
2024-09-18 18:15:13 +00:00
Write-Progress -Activity " Retrieving data from $Env:COMPUTERNAME " -Status " Parsing Citrix Version, and Chassis Type " -PercentComplete 90
2024-09-13 23:32:38 +00:00
#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
}
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
#Chassis Type
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
Switch -Wildcard ( $Model ) {
" Optiplex* " {
Switch -Wildcard ( $CPU )
{
" Intel(R) Core(TM) i5-9500 CPU* " { $chassisType = " SFF " } #5070
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
" Intel(R) Core(TM) i5-6500 CPU* " { $chassisType = " SFF " } #7040
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
" Intel(R) Core(TM) i5-6500T* " { $chassisType = " Micro " } #7040
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
" Intel(R) Core(TM) i7-6700 CPU* " { $chassisType = " SFF " } #7040
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
" Intel(R) Core(TM) i7-6700T* " { $chassisType = " Micro " } #7040
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
" Intel(R) Core(TM) i5-10500T* " { $chassisType = " Micro " } #5080
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
" Intel(R) Core(TM) i5-9500T* " { $chassisType = " Micro " } #5070
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
" Intel(R) Core(TM) i5-8500 CPU* " { $chassisType = " SFF " } #5060
" Intel(R) Core(TM) i5-8500T* " { $chassisType = " Micro " } #5060
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
" 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
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
" Intel(R) Core(TM) i5-3550 CPU* " { $chassisType = " SFF " } #9010
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
" Intel(R) Core(TM) i5-2400 CPU* " { $chassisType = " SFF " } #990
2024-06-11 18:27:55 +00:00
2024-09-13 23:32:38 +00:00
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 " }
}
2024-09-23 21:39:12 +00:00
$timeout = if ( $SparkQueryTimeoutSec ) { $SparkQueryTimeoutSec } else { 5 }
2024-09-18 18:15:13 +00:00
Write-Progress -Activity " Retrieving data from $Env:COMPUTERNAME " -Status " Querying Spark! for location details. Timeout $( $timeout ) s " -PercentComplete 95
2024-09-13 23:32:38 +00:00
$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 {
2024-09-23 21:39:12 +00:00
#Write-Host $_.Exception.Message
Write-Warning " Failed querying Spark! "
2024-09-13 23:32:38 +00:00
}
$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 ' | '
2024-09-18 18:15:13 +00:00
Write-Progress -Activity " Retrieving data from $Env:COMPUTERNAME " -PercentComplete 100
2024-09-13 23:32:38 +00:00
#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 | $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
}
2024-09-18 18:15:13 +00:00
Write-Progress -Activity " Retrieving data from $Env:COMPUTERNAME " -Completed
2024-09-13 23:32:38 +00:00
return $obj
}