Merge branch 'Monitor'
This commit is contained in:
commit
40a7ec24cf
|
|
@ -52,9 +52,11 @@ function Get-PCBatchInvoke {
|
||||||
|
|
||||||
#Adapter
|
#Adapter
|
||||||
$adapter = ($win32_networkadapterconfiguration | Where-Object {$_.IpEnabled -Match "True"} | Select-Object -Expand Description)
|
$adapter = ($win32_networkadapterconfiguration | Where-Object {$_.IpEnabled -Match "True"} | Select-Object -Expand Description)
|
||||||
|
<#
|
||||||
if($adapter -is [array]){
|
if($adapter -is [array]){
|
||||||
$adapter = $adapter[0]
|
$adapter = $adapter[0]
|
||||||
}
|
}
|
||||||
|
#>
|
||||||
|
|
||||||
#UserName
|
#UserName
|
||||||
$Username = $PCInfo.CSUserName
|
$Username = $PCInfo.CSUserName
|
||||||
|
|
|
||||||
115
Private/PCMonitor.ps1
Normal file
115
Private/PCMonitor.ps1
Normal file
|
|
@ -0,0 +1,115 @@
|
||||||
|
function Invoke-PCMonitor {
|
||||||
|
param(
|
||||||
|
[string[]] $comps
|
||||||
|
)
|
||||||
|
# Ask to notify
|
||||||
|
$notify = $(Read-Host "Notify with pop-up window? (y/N)") -match "^[yY]"
|
||||||
|
if ($notify) {
|
||||||
|
Add-Type -AssemblyName PresentationFramework
|
||||||
|
}
|
||||||
|
$sleepTime = $(Read-Host "Checkin interval in seconds (Default: 300 [5 min])")
|
||||||
|
if (-not ($sleepTime)) { $sleepTime = 300 }
|
||||||
|
$dogs = @()
|
||||||
|
# Initialize computer sessions
|
||||||
|
foreach ($comp in $comps) {
|
||||||
|
Write-Progress -Activity "Initializing sessions" -Status $comp -PercentComplete ($dogs.Length/$comps.Length)
|
||||||
|
$dog = [WatchDog]::new($comp)
|
||||||
|
$null = $dog.Update()
|
||||||
|
$dogs += $dog
|
||||||
|
}
|
||||||
|
Write-Progress -Activity "Initializing sessions" -Completed
|
||||||
|
while ($true) {
|
||||||
|
$change = $false
|
||||||
|
foreach ($dog in $dogs) {
|
||||||
|
$msg = $dog.ReportChange()
|
||||||
|
if ($msg) {
|
||||||
|
$change = $true
|
||||||
|
if ($notify) {
|
||||||
|
$null = [System.Windows.MessageBox]::Show($msg)
|
||||||
|
}
|
||||||
|
Write-Host "$msg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# Update date and time so user knows script hasn't frozen
|
||||||
|
if (-not ($change)) {
|
||||||
|
$date = Get-Date -Format "[MM/dd/yy HH:mm:ss]"
|
||||||
|
Write-Host -NoNewline "$date `r"
|
||||||
|
}
|
||||||
|
Start-Sleep $sleepTime
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class WatchDog {
|
||||||
|
[string]$Hostname
|
||||||
|
[System.Management.Automation.Runspaces.PSSession]$Session
|
||||||
|
[string]$LastUser
|
||||||
|
WatchDog() { $this.Init(@{})}
|
||||||
|
WatchDog([hashtable]$Properties) { $this.Init($Properties)}
|
||||||
|
WatchDog([string]$Hostname) { $this.Init(@{Hostname = $Hostname})}
|
||||||
|
[void] Init([hashtable]$Properties){
|
||||||
|
foreach ($prop in $Properties.Keys) {
|
||||||
|
$this.$prop = $Properties.$prop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[string] ToString() {
|
||||||
|
return `
|
||||||
|
"Hostname: $($this.Hostname) `n" +
|
||||||
|
"Status: $(if ($this.Session) { 'Online' } else { 'Offline' }) `n" +
|
||||||
|
"User: $($this.LastUser) `n"
|
||||||
|
}
|
||||||
|
[WatchDog] Copy() {
|
||||||
|
$props = @{}
|
||||||
|
foreach ($prop in $this.PSObject.Properties) {
|
||||||
|
$props.$($prop.Name) = $prop.Value
|
||||||
|
}
|
||||||
|
return [WatchDog]$props
|
||||||
|
}
|
||||||
|
# Returns true if a value was updated
|
||||||
|
[bool] Update() {
|
||||||
|
$old = $this.Copy()
|
||||||
|
if (-not (Test-Connection -ComputerName $this.Hostname -Count 1)) {
|
||||||
|
$this.Session = $null
|
||||||
|
return ($old.Session)
|
||||||
|
}
|
||||||
|
if (-not ($this.Session)) {
|
||||||
|
$this.Session = New-PSSession -ComputerName $this.Hostname -SessionOption (New-PSSessionOption -NoMachineProfile)
|
||||||
|
}
|
||||||
|
$this.LastUser = $(Invoke-Command -Session $this.Session {Get-ComputerInfo}).CSUserName
|
||||||
|
if($null -eq $this.LastUser){
|
||||||
|
|
||||||
|
$this.LastUser = (Invoke-Command -Session $this.Session -ScriptBlock {Get-Process Explorer -IncludeUsername | Where-Object { $_.Username -notlike "*SYSTEM" }} ).Username
|
||||||
|
|
||||||
|
if($null -ne $this.LastUser){
|
||||||
|
$this.LastUser = "$($this.LastUser) (RDP/Inactive)"
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$this.LastUser = $null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (($this.Session -ne $old.Session) -or ($this.LastUser -ne $old.LastUser))
|
||||||
|
}
|
||||||
|
# Returns a message describing any changes
|
||||||
|
[string] ReportChange() {
|
||||||
|
$old = $this.Copy()
|
||||||
|
if (-not ($this.Update())) { return $null }
|
||||||
|
$date = Get-Date -Format "[MM/dd/yy HH:MM:ss]"
|
||||||
|
if ($old.Session -ne $this.Session) {
|
||||||
|
if ($old.Session -and $this.Session) {
|
||||||
|
return "$date $($this.Hostname) | Session re-established"
|
||||||
|
} elseif ($this.Session) {
|
||||||
|
return "$date $($this.Hostname) | Online"
|
||||||
|
} else {
|
||||||
|
return "$date $($this.Hostname) | Offline"
|
||||||
|
}
|
||||||
|
} elseif ($old.LastUser -ne $this.LastUser) {
|
||||||
|
if ($old.LastUser -and $this.LastUser) {
|
||||||
|
return "$date $($this.Hostname) | $($old.LastUser) logged off and $($this.LastUser) logged on"
|
||||||
|
} elseif ($old.LastUser) {
|
||||||
|
return "$date $($this.Hostname) | $($old.LastUser) logged off"
|
||||||
|
} else {
|
||||||
|
return "$date $($this.Hostname) | $($this.LastUser) logged on"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -112,7 +112,6 @@
|
||||||
$SourceRoot = "\\$Computer\c$\Users\$User"
|
$SourceRoot = "\\$Computer\c$\Users\$User"
|
||||||
$BackupDestination = "\\SHSCMGSRMC\ProfileBackup"
|
$BackupDestination = "\\SHSCMGSRMC\ProfileBackup"
|
||||||
$Destination = "\\SHSCMGSRMC\ProfileBackup\$DestinationFileName"
|
$Destination = "\\SHSCMGSRMC\ProfileBackup\$DestinationFileName"
|
||||||
$CopiedUserDesktop = Join-Path -Path $Destination -ChildPath "Desktop"
|
|
||||||
|
|
||||||
#region BACKUP
|
#region BACKUP
|
||||||
if($ConfirmUser -eq 'y'){
|
if($ConfirmUser -eq 'y'){
|
||||||
|
|
@ -155,6 +154,7 @@
|
||||||
Write-Warning "Invalid input please restart script"
|
Write-Warning "Invalid input please restart script"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
#Creates a log file
|
#Creates a log file
|
||||||
New-Item -Path $Destination\backuplog.txt -Force | Write-Verbose
|
New-Item -Path $Destination\backuplog.txt -Force | Write-Verbose
|
||||||
$log = Join-Path -Path $Destination -ChildPath backuplog.txt
|
$log = Join-Path -Path $Destination -ChildPath backuplog.txt
|
||||||
|
|
@ -171,6 +171,7 @@
|
||||||
#Cleans up Citrix Shortcuts
|
#Cleans up Citrix Shortcuts
|
||||||
|
|
||||||
Write-Host "Removing Citrix Shortcuts from backup"
|
Write-Host "Removing Citrix Shortcuts from backup"
|
||||||
|
$CopiedUserDesktop = Join-Path -Path $Destination -ChildPath "Desktop"
|
||||||
$Shortcuts = Get-ChildItem -Path $CopiedUserDesktop -Filter *.lnk
|
$Shortcuts = Get-ChildItem -Path $CopiedUserDesktop -Filter *.lnk
|
||||||
|
|
||||||
foreach($Shortcut in $Shortcuts){
|
foreach($Shortcut in $Shortcuts){
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
#region Module Import Block
|
#region Module Import Block
|
||||||
|
|
||||||
$ErrorActionPreference = 'SilentlyContinue'
|
#$ErrorActionPreference = 'SilentlyContinue'
|
||||||
#DevStage can take either Dev or Prod as values
|
#DevStage can take either Dev or Prod as values
|
||||||
$devStage = 'Dev'
|
$devStage = 'Dev'
|
||||||
#Locations for dev build and prod build
|
#Locations for dev build and prod build
|
||||||
|
|
@ -93,6 +93,7 @@ Function Get-PC {
|
||||||
[switch]$InstallNet35,
|
[switch]$InstallNet35,
|
||||||
[switch]$Jobsprinters,
|
[switch]$Jobsprinters,
|
||||||
[Switch]$LogOffUser,
|
[Switch]$LogOffUser,
|
||||||
|
[Switch]$Monitor,
|
||||||
[Switch]$NextPrinterName,
|
[Switch]$NextPrinterName,
|
||||||
[switch]$Orion,
|
[switch]$Orion,
|
||||||
[Switch]$PatchNotes,
|
[Switch]$PatchNotes,
|
||||||
|
|
@ -529,7 +530,7 @@ Function Get-PC {
|
||||||
Get-InstallNet35 $comp
|
Get-InstallNet35 $comp
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
#Checks if there is a WinRM service error
|
#Checks if there is a WinRM service error
|
||||||
#TODO Re-evaluate where we want the WSNetwork test
|
#TODO Re-evaluate where we want the WSNetwork test
|
||||||
#$WSNetworkTest = Test-WSMan -ComputerName $comp
|
#$WSNetworkTest = Test-WSMan -ComputerName $comp
|
||||||
|
|
@ -543,6 +544,7 @@ Function Get-PC {
|
||||||
if ($adTest) {
|
if ($adTest) {
|
||||||
Write-Warning "$comp is either disabled or off the domain"
|
Write-Warning "$comp is either disabled or off the domain"
|
||||||
}
|
}
|
||||||
|
Write-Progress -Activity "Looking up computer in AD" -Completed
|
||||||
}
|
}
|
||||||
|
|
||||||
#Direct SCCM Queries
|
#Direct SCCM Queries
|
||||||
|
|
@ -580,6 +582,12 @@ Function Get-PC {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Monitor list of PCs for change in online status or
|
||||||
|
if ($Monitor) {
|
||||||
|
Invoke-PCMonitor $getPCComputers
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
#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)
|
$outPutArray += Get-PCBatchInvoke($getPCComputers)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue