Skip to main content

Get Crystal Disk Info (Disk Health)

Summary

The script runs the Crystal Disk Info tool on the end machines and fetches the Disk Health. The data is then formatted and stored in CW RMM - Custom Field - Crystal Disk Info_Disk Health Custom Field for further auditing and monitoring purposes.

Output Syntax: Harddisk - \\<Model> (Drives: \\<Drive Letter(s)>): Health Status - \\<Status>

Sample Run

Sample Run 1
Sample Run 2
Sample Run 3

Dependencies

User Parameters

NameExampleRequiredTypeDescription
ReallocatedSector65FalseNumber ValueThe threshold for the number of reallocated sectors to mark an HDD as caution (not applicable to SSDs). The default threshold is 50.

Parameter Example

Task Creation

Create a new Script Editor style script in the system to implement this task.

Task Creation Step 1
Task Creation Step 2

Name: Get Crystal Disk Info (Disk Health)
Description: The script runs the Crystal Disk Info tool on the end machines and fetches the Disk Health.
Category: Data Collection

Task Creation Icon

Parameters

ReallocatedSector

Add a new parameter by clicking the Add Parameter button present at the top-right corner of the screen.

Add Parameter Step 1

This screen will appear.
Add Parameter Step 2

  • Set ReallocatedSector in the Parameter Name field.
  • Select Number Value from the Parameter Type dropdown menu.
  • Click the Save button.

Parameter Save Example

Task

Navigate to the Script Editor section and start by adding a row. You can do this by clicking the Add Row button at the bottom of the script page.

Add Row Step

A blank function will appear.
Blank Function

Row 1 Function: PowerShell Script

Search and select the PowerShell Script function.

PowerShell Function Search
PowerShell Function Selected

The following function will pop up on the screen:
PowerShell Function Example

Paste in the following PowerShell script and set the Expected time of script execution in seconds to 300 seconds. Click the Save button.

$model = (Get-CimInstance -ClassName Win32_ComputerSystem).Model
if ( $model -match 'Virtual|Vmware' ) {
return 'Virtual Machine - Crystal Disk Not Eligible'
}
#region parameters
$reallocatedSector = '@ReallocatedSector@'
if ( $reallocatedSectors -match '^[0-9]{1,4}$' ) {
$Parameters = @{
ReallocatedSector = $reallocatedSector
}
} elseif ( !((Get-PhysicalDisk).Mediatype -match 'SSD') -and ($reallocatedSectors -notmatch '^[0-9]{1,4}$') ) {
$Parameters = @{
ReallocatedSector = 50
}
}
#region Setup - Variables
$ProjectName = 'Get-CrystalDiskInfo'
[Net.ServicePointManager]::SecurityProtocol = [enum]::ToObject([Net.SecurityProtocolType], 3072)
$BaseURL = 'https://file.provaltech.com/repo'
$PS1URL = "$BaseURL/script/$ProjectName.ps1"
$WorkingDirectory = "C:\ProgramData\_automation\script\$ProjectName"
$PS1Path = "$WorkingDirectory\$ProjectName.ps1"
$WorkingPath = $WorkingDirectory
$LogPath = "$WorkingDirectory\$ProjectName-log.txt"
$ErrorLogPath = "$WorkingDirectory\$ProjectName-Error.txt"
#endregion
#region Setup - Folder Structure
New-Item -Path $WorkingDirectory -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
$response = Invoke-WebRequest -Uri $PS1URL -UseBasicParsing
if (($response.StatusCode -ne 200) -and (!(Test-Path -Path $PS1Path))) {
throw "No pre-downloaded script exists and the script '$PS1URL' failed to download. Exiting."
} elseif ($response.StatusCode -eq 200) {
Remove-Item -Path $PS1Path -ErrorAction SilentlyContinue
[System.IO.File]::WriteAllLines($PS1Path, $response.Content)
}
if (!(Test-Path -Path $PS1Path)) {
throw 'An error occurred and the script was unable to be downloaded. Exiting.'
}
#endregion
#region Execution
if ($Parameters) {
$disks = & $PS1Path @Parameters
} else {
$disks = & $PS1Path
}
#endregion
if ( !(Test-Path $LogPath) ) {
throw 'PowerShell Failure. A Security application seems to have restricted the execution of the PowerShell Script.'
}
if ( $disks ) {
$op = @()
foreach ( $disk in $disks ) {
$op += "Harddisk - $($disk.Model)$(if($disk.'Drive Letter' -match '[A-z]'){' (Drive Letter: ' + $disk.'Drive Letter' + ')'}): Health Status - $($disk.'Health Status')"
}
return $op -join '\|'
}
if ( Test-Path $ErrorLogPath ) {
$ErrorContent = ( Get-Content -Path $ErrorLogPath )
throw $ErrorContent
}

Script Example

Row 2 Function: Script Log

Add a new row by clicking the Add Row button.
Add Row Step 1

A blank function will appear.
Blank Function

Search and select the Script Log function.
Script Log Search
Script Log Selected

The following function will pop up on the screen:
Script Log Example

In the script log message, simply type %output% and click the Save button.
Script Log Save

Row 3 Function: Set Custom Field

Add a new row by clicking the Add Row button.
Add Row Step 2

A blank function will appear.
Blank Function

Search and select the Set Custom Field function.
Set Custom Field Search

The following function will pop up on the screen:
Set Custom Field Example

  • Search and select the Computer-Level Custom Field Crystal Disk Info_Disk Health from the Custom Field dropdown menu.
  • Set %Output% in the Value field.
  • Click the Save button.

Set Custom Field Save 1
Set Custom Field Save 2

Click the Save button at the top-right corner of the screen to save the script.
Final Save

Completed Script

Completed Script

Deployment

It is suggested to run the task once per week against Windows computers.

  • Go to Automation > Tasks.
  • Search for the Crystal Disk Info Task.
  • Select the concerned task.
  • Click on the Schedule button to schedule the task/script.
    Schedule Task

This screen will appear.
Schedule Screen

  • Select the relevant time to run the script and click the "Does not repeat" button.
    Does Not Repeat

This pop-up box will appear.
Pop-up Box

  • Change the number of days to 7 and click OK.
    Change Days
    Confirm Days

  • Search for windows in the Resources* and select Windows Desktops and Windows Servers groups. You can search and select any relevant group you would like to schedule the task against.
    Select Groups

  • Now click the Run button to initiate the task.
    Run Task

  • The task will start appearing in the Scheduled Tasks.
    Scheduled Tasks
    Scheduled Tasks Example

Output

  • Script log
    Script Log Output
  • Custom Field
    Custom Field Output