Using PowerShell to Check FW Client Status
What
The FileWave client on Windows is like any other software service...the service can be impacted by computer uptime, user interference, crashes, etc. This article gives you a way to INDEPENDENTLY check that a list of devices has the FileWave client and it is in working order (or not).
When/Why
Will you need this frequently? Unlikely, but all the same it is a great tool for sweeping a network to look for devices and confirm the FileWave client (for Windows only). The code here does make some assumptions about your environment, but those are called out below.
How
So, you think the FileWave client may be broken or missing on some endpoints? Wouldn't it be great if you could verify that remotely rather than having to confirm the devices by hand. The following allows you to do just that.
#import a list of computers
$mypath=$MyInvocation.MyCommand.Path
$mypath=Split-Path $mypath -Parent
try {
$computers=Get-Content $mypath\computers.txt -ErrorAction Stop
} catch {
#no computers.txt file found
write-host "`nTo use this utility, a text file called computers.txt must exist in the same location as the script. The file should contain one computer name or IP per line"
break
}
foreach ($computer in $computers) {
$online=$false
try{
#try to resolve the name
$online = Resolve-DnsName $computer -quicktimeout -ErrorAction Stop
$online = $true
}catch{
#Catching errors...machine offline
$online= $false
}
if (!$online) {
#device not online...show it in UI so that we see progress, but don't write it to the results file since it isn't actionable
write-host "$computer, Not online"
} else {
#device online, so let's just see if the service is there
$fw_service=""
try{
#Getting service ...sometimes device might not allow collection (if RPC is unavailable for instance)
$fw_service = Get-Service -ComputerName $computer -Name 'FilewaveWinClient' -ErrorAction Stop
$fw_service=$fw_service.Status
}catch{
#Catching errors...no filewave service
$fw_service="no"
}
if ($fw_service -eq "no") {
#no need to look further since we either can't talk to RPC, or there is no FW service
write-host "$computer, No FW Service or RPC unavailable"
Add-Content -Path $mypath\output.txt -Value "$computer, FW Needs Installed or RPC Unavailable"
} else {
#fw is there as a service, so let's return status, version, and server address
try {
#using C$ share, which won't require winrm
$TargetPath = "\\$computer\C$\Program Files (x86)\FileWave\fwcld.exe"
$fw_version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($TargetPath)
$fw_version = $fw_version.ProductVersion
} catch {
#Catching errors
$fw_version="version not readable"
}
#get fw server address from registry
try {
#read server address from registry
#we need remote registry turned on to read, but we'll turn it back off
#note this does not account for an environment where remote-registry is on by default...if so, comment out the remote registry lines
Get-Service -ComputerName $computer -Name RemoteRegistry | Set-Service -StartupType Manual -PassThru| Start-Service
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computer)
$RegKey= $Reg.OpenSubKey("SOFTWARE\\WOW6432Node\\FileWave\\WinClient")
$fw_server = $RegKey.GetValue("Server")
#turn remote registry back off
Get-Service -ComputerName $computer -Name RemoteRegistry | Set-Service -StartupType Disabled -PassThru| Stop-Service
} catch {
#Catching errors...no registry
$fw_server="server address not readable"
}
#write the output
write-host "$computer, $fw_service, $fw_version, $fw_server"
Add-Content -Path $mypath\output.txt -Value "$computer, $fw_service, $fw_version, $fw_server"
}
}
}
Assumptions made in the above code:
Related Content
- Insert here links to any articles that relate to this content.