Jump to content


  • Content Count

  • Joined

  • Last visited

Community Reputation

0 Neutral

My Information

  • Agent Count

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. zubz

    Automate Client Constant Crash

    You sir are my hero!!! It's been 3 months trying to fix this problem and couldn't monitor a client sharepoint server. Connectwise unable to resolve... (they have not been able to resolve a lot of my issues recently) Thank you so much!
  2. Anyone having the problem where the deployment manager says "Device failed deployment readiness checks"? I've got the password set at: Location Probe Deployment Manager LTService Password doesn't have any special characters either. Not sure if anyone has run into this issue before? Seems to be happening accross all our gen2 probes.
  3. zubz

    Automate Client Constant Crash

    I have the same issue with one of our servers. I had labtech work on this for 3 days straight until they gave up and couldn't tell me what the issue was. Funily enough it only happens for one particular server for a client (Sharepoint server). We've tried all sorts of things - .net repair, av exclusions, copying registry from another working server etc etc. I'm at a loss and i've had a same issue since upgrading from 120.451. We also have this issue on some of our other servers now as well. We use Citrix MCS and use a script to remove MAC / ID / Password from registry before shutdown. This used to work for years but since upgrading from 120.451 it has now stopped. We have reinstall LT on these servers manually everytime we refresh the mcs clones. LT have not been helpfull at all in figuring this one out. Anyone else having this issue? or have had any luck getting this fixed?
  4. zubz

    My Dashing NOC / HUD

    I've been getting a bit of people messaging me about this - Just thought I'd add my "Hotness w /sound" widget. This widget allows me to play a sound when the counter changes. See the 3 widget files attached. Place these in the folder /opt/dashing/rmm_hud/widgets/hotnesswsound Place your Mp3 files in this folder: /opt/dashing/rmm_hud/assets/images/mp3/ (the ERB file refers to this directory as /assets/mp3 (the /assets is an alias to the images directory) in your /opt/dashing/rmm_hud/home.erb You can use the widget like this: <li data-row="1" data-col="4" data-sizex="1" data-sizey="1"> <div data-id="urgenttickets" data-view="Hotnesswsound" data-title="New Urgent Tickets" data-moreinfo="" data-valchangenotoksound="/assets/mp3/demonstrative.mp3" data-cool="0" data-warm="1"></div> </li> Adjust the cool and warm values for when you want the sound to be played. (mine plays a sound at 1 and every increase after that) When it's 0 it's green. I pull my urgent tickets from CW Manage. My jb file for urgent tickets looks like this: require 'tiny_tds' SCHEDULER.every '30s', :first_in => 0 do |job| client = TinyTds::Client.new(:username => 'xxxxx', :password => 'xxxxxx', :host => 'xxxxxx', :database => 'xxxxx', :port => '1433') rs = client.execute("Select s.Ticketnbr, s.status_description, s.company_name, s.Summary, s.date_entered_utc, s.minutes_waiting, s.Urgency from v_rpt_service s With (NOLOCK) JOIN sr_service_calculated sc With (NOLOCK) ON sc.SR_Service_RecID = s.TicketNbr WHERE s.board_name like 'Team%Support' and s.Closed_Flag = 0 and (s.date_responded_utc is null or s.status_description like 'New%') and sc.SLA_Status_text <> 'Waiting' and s.parent is null and s.Urgency like 'Priority 1%' Order by date_entered_utc desc") current_count = rs.count if rs.count > 0 resulttitle = rs.first['company_name'] lastupdate = "#" + rs.first['Ticketnbr'].to_s else resulttitle = "" lastupdate = "" end send_event('urgenttickets', { value: current_count, lasttitle: resulttitle, lastupdatevalue: lastupdate } ) client.close end You will have to change the "WHERE" clause if you're going to use the above as the Board,Urgency and statuses might be different to your Manage environment. Also you will need to setup a SQL user to your CW database and add details in the jb file. (You can setup a limited access read only user) (Sorry no API calls with DASHING) hotnesswsound.coffee hotnesswsound.html hotnesswsound.scss
  5. Does this work with 6.5+ of Connectwise Control? Do you need a signature for the plugin?
  6. zubz

    Maintenance Notifications

    We have something like this set up. We use connectwise templates that create tickets on a "Maintenance" board in a specific status. This status has a templated email that sends an email to the contact (set from the connectwise template) which basically lists the maitenance notification. We use the "srnextscheduledate and srnextscheduletime" tag in the template to show the date and time in the email that gets sent out. Because our maintenance schedules are regular we can use the template to generate a ticket on say 7 days before the first Saturday of every month which will set the schedule to the First Saturday of the month at 12aM to 5am. This ticket gets created on the maintenance board which is set to a specific status that emails the contact. We have different templates for different days (eg one template for Sunday one for Saturday and 2nd Saturday or 1st Saturday etc) We then reference these in the Company tab and it gets added as part of the onboarding. See below EDIT: It's a bit hard to to a time range using the CW templates as when you use the "srnextscheduletime" it only shows the Start time (not the end time) So you may need to play around with the template based on how you do maintenance eg is it always between a certain time for all your clients or would you only list the start time and then say "Maintenance will last for x hours" - that way you can use the "srnextscheduletime" inside the email if you're doing different start times for different clients.
  7. zubz

    UAC bypass

    No problem.
  8. zubz

    UAC bypass

    I found that the values in the following key: HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\ ConsentPromptBehaviorAdmin = 0 (User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode) EnableInstallerDetection = 0 (User Account Control: Detect application installations and prompt for elevation) EnableLUA = 1 (This setting will enable UAC) Set the above keys to have UAC enabled but allow you to bypass UAC on an Admin account. Sometimes there are things that will cause UAC to fail so I have a scriptlet that enables the built in administrator account - runs the specific command as that user using the Shell as User or process execute as user command then disables the account straight after. (The built in administrator account will always bypass UAC by default)
  9. zubz

    My Dashing NOC / HUD

    I guess the table is the least common one so I'll run through it here, If you've got Dashing installed (Linux setup - not plugin setup) I can help. The below assumes you have dashing installed on a Linux server and the MySQL connector for labtech already configured. There is a sticky on the dashing forum on how to set this up. First you need to install the table widget: dashing install 9c7cb3030f63ad10e517 I then did some customisations with the table widget to change the colours a little, you can adjust the colours however you want. Edit file widgets/table/table.scss Change the colours at the top to this: $background-color: #000000; $value-color: #fff; $title-color: rgba(255, 255, 255, 0.7); $label-color: #e2e2e2; $moreinfo-color: rgba(255, 255, 255, 0.7); $th-background-color: #7c7979; $tr-odd-background-color: #704c4c; $tr-even-background-color: #8e3737; $tr-hover-background-color: #858585; And then for the icing on the cake - I will share with you my rb job file (I named it jobs/drv.rb). If you understand mysql you can tweak the filters at the end however you want. The below excludes clients with audit plans and displays the following: - 5% or lower free space - 3GB or lower free space - Less than 10% and less than 5GB (this is to account for small drives) require_relative 'my_db.rb' SCHEDULER.every '60s', :first_in => 0 do |job| db = MyDb.conn sql = "SELECT * FROM ( SELECT clients.name AS clientname, computers.NAME AS computerslist, letter, volumename, size, free, ROUND((free/size)*100) AS Percentfree, free AS RemainGB FROM `v_drivesinternal` vr JOIN computers ON computers.computerid=vr.computerid JOIN v_extradatalocations ed ON computers.locationid=ed.locationid JOIN clients ON clients.clientid=computers.clientid WHERE computers.os LIKE '%server%' AND vr.missing=0 AND vr.model NOT LIKE '%Expansion%' AND ed.`Audit Plan` IN ('None','') )AS Results WHERE size <> 0 AND free <> 0 AND ( Percentfree < 6 OR RemainGB < 3 OR (PercentFree < 10 AND RemainGB < 5) ) ORDER BY RemainGB ASC LIMIT 9" results = db.query(sql) servers = results.map do |row| row = { cols: [ {class: 'left', value: row['clientname']}, {class: 'left',value: row['computerslist']}, {value: row['Letter']}, {value: row['RemainGB'].to_s + "(" + row['Percentfree'].to_s + "%)" } ] } end hrows = [ { cols: [ {class: 'left',value: 'Client'}, {class: 'left',value: 'Computer'},{value: 'Drive Letter'},{value: 'FreeSpace (MB)'} ] } ] send_event('drv', { hrows: hrows, rows: servers } ) In your /opt/dashing/rmm_hud/dashboards/home.erb - add the following: ( you can change the row/col ids if you like) ( My dashing is installed in /opt/dashing/rmm_hud/ ) <li data-row="2" data-col="1" data-sizex="2" data-sizey="1"> <div data-id="drv" data-view="Table" data-title="Drive Free Space Alerts" data-max="5"> </div> </li> Restart your dashing service and you should now see the table. You may need to customise the layout. sudo systemctl restart dashing.service I don't have time to go through the hotness customisations right now - but seriously PM me if you're interested.
  10. zubz

    My Dashing NOC / HUD

    Thought I'd share my screen with everyone. It's pretty custom for our company however PM me if you would like any details on any of the widgets / setup below. I use the hotness widget but I added an additional section below the number which gives us the latest value from the sql query. The table widget I found online and customised it a little. edit: I followed this post for the base Ubuntu Install . See my posts below on how to setup the Table dash
  11. zubz

    Dashing on Ubuntu: Install Guide

    Having issues with tiny_tds... I've installs freetds but still getting compile errors. xxx@xxxx:/opt/dashing/rmm_hud# sudo apt-get install freetds-dev Reading package lists... Done Building dependency tree Reading state information... Done freetds-dev is already the newest version (0.91-6.1build1). The following packages were automatically installed and are no longer required: libcgmanager0 libnih-dbus1 mountall Use 'sudo apt autoremove' to remove them. 0 to upgrade, 0 to newly install, 0 to remove and 6 not to upgrade. xxx@xxx:/opt/dashing/rmm_hud# gem install tiny_tds Building native extensions. This could take a while... ERROR: Error installing tiny_tds: ERROR: Failed to build gem native extension. current directory: /var/lib/gems/2.3.0/gems/tiny_tds-1.0.4/ext/tiny_tds /usr/bin/ruby2.3 -r ./siteconf20160929-16521-5740vn.rb extconf.rb extconf.rb:14: warning: already initialized constant OpenSSL::SSL::VERIFY_PEER checking for sybfront.h... yes checking for sybdb.h... yes checking for tdsdbopen() in -lsybdb... yes checking for dbanydatecrack() in -lsybdb... no Downloading freetds-1.00.tar.bz2 (100%) Extracting freetds-1.00.tar.bz2 into tmp/x86_64-pc-linux-gnu/ports/freetds/1.00... OK Running git apply with /var/lib/gems/2.3.0/gems/tiny_tds-1.0.4/ports/patches/freetds/1.00/0001-mingw_missing_inet_pton.diff... OK Running 'configure' for freetds 1.00... OK Running 'compile' for freetds 1.00... OK Running 'install' for freetds 1.00... OK Activating freetds 1.00 (from /var/lib/gems/2.3.0/gems/tiny_tds-1.0.4/ports/x86_64-pc-linux-gnu)... checking for sybfront.h... yes checking for sybdb.h... yes checking for tdsdbopen() in -lsybdb... yes checking for dbanydatecrack() in -lsybdb... no ----- freetds is missing. Do you have FreeTDS 0.95.80 or higher installed? ----- *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/usr/bin/$(RUBY_BASE_NAME)2.3 --help --enable-lookup --disable-lookup --with-freetds-dir --without-freetds-dir --with-freetds-include --without-freetds-include=${freetds-dir}/include --with-freetds-lib --without-freetds-lib=${freetds-dir}/lib --with-sybdblib --without-sybdblib --with-sybdblib --without-sybdblib --enable-system-freetds --disable-system-freetds --enable-system-iconv --disable-system-iconv --enable-system-openssl --disable-system-openssl --enable-gnutls --disable-gnutls --enable-openssl --disable-openssl --with-freetds-dir --without-freetds-dir --with-freetds-include --without-freetds-include=${freetds-dir}/include --with-freetds-lib --without-freetds-lib=${freetds-dir}/lib --with-sybdblib --without-sybdblib --with-sybdblib --without-sybdblib To see why this extension failed to compile, please check the mkmf.log which can be found here: /var/lib/gems/2.3.0/extensions/x86_64-linux/2.3.0/tiny_tds-1.0.4/mkmf.log extconf failed, exit code 1 Any ideas?
  12. zubz

    Dashing on LabTech (as a Plugin)

    --- removed --- Posted in wrong thread
  13. zubz

    Nagios for LabTech Plugin

    Hey Cubert, How's this tracking along? I'd love to be part of the development and testing. We actively use a separate Icinga box so I'd be very very interested in testing this with you guys
  14. I ended up contacting LT support and they said that its due to the pushed flag not being cleared. I created a script that runs everyday to clear the pushed flag on patches that have failed. It still seems to happen every now and again but it generally resolves itself now on the next push attempt. Apparently labtech will only try to push a patch twice, and won't try again. This can have an affect on other agents as well if patches fail more than once. The tech said I just need to make sure the push failures are cleared to avoid the issue.
  15. zubz

    VSC Enabled \ Disabled

    I've been working on something here - it's not finished but i'll post my powershell script here for anyone to use: There's two parts to the script, and accepts different parameters for each part. Check if ShadowCopies are enabled: -checkVSS By default this excludes the C drive - Need to use -includecdrive to include the c drive. This will scan through each drive and throw either "error" or "success" for each drive. I used a remote monitor with regex to check for the words "Error" and raise an alert if found. You can use -includecdrive after -checkVSS to include checking the C drive of a server. (We did this for flexibility) Additionaly, there are some registry checks built in as well which we use EDF's to run scripts which push these out ( I haven't completed the search groups properly yet, but the idea is there ) which can exclude certain drives as well. Example: There is a registry value (HKLM:\Software\Bremmar\Labtech\ExcludedDrives that can store drive letters in a comma separated list that will exclude drives which we can add in an EDF on the computer screen. We schedule the edf's to run every day based on if a checkbox "Custom VSS Checks" is enabled. These computers get added to a group which updates the registry key daily based on their EDF's. Enable VSS: -enableVSS If you use this switch, (which also accepts the -includecdrive) it will scan through the drives and enable VSS on a 2 x a day schedule with a random minute between 7-8am and 12-1pm. We did the random minute as we didn't want all servers on all drives running a vss snapshot at exactly the same time down to the millisecond, this can cause performance issues when you have a lot of drives on the same underlying storage. It builds the XML and adds it to the task. Script is 2008r2/2012/2012r2 compatible. Tested on Powershell 2.0 upwards. Code below - feel free to modify as required. I'm generally bad at commenting by scripts so I've tried to comment most of everything here for ease of reference. Feel free to ask any questions. PLEASE RUN YOUR OWN TESTING BEFORE USING IN PRODUCTION. I accept no responsibility for any fires occurring! #Find all Local Drives - Check if ShadowCopies currently exist or are scheduled for drive. If not enable for all local drives # at schedule of 7am and 12pm ###FUNCTIONS### param ( [switch]$enableVSS, [switch]$includecdrive, [switch]$checkVSS ) #Test Registry Value Function (Used to test if a registry value exists) function Test-RegistryValue { param ( [parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()]$Path, [parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()]$Value ) try { Get-ItemProperty -Path $Path | Select-Object -ExpandProperty $Value -ErrorAction Stop | Out-Null return $true } catch { return $false } } #DatetimeConversion Function ( Convert DateTime to Australian date format ) function Convert-StringToDateTime ($DateTimeStr) { $DateTimeParts = $DateTimeStr -split ' ' $DateParts = $DateTimeParts[0] -split '/|-|\.' $DateFormatParts = (Get-Culture).DateTimeFormat.ShortDatePattern -split '/|-|\.' $Month_Index = ($DateFormatParts | Select-String -Pattern 'M').LineNumber - 1 $Day_Index = ($DateFormatParts | Select-String -Pattern 'd').LineNumber - 1 $Year_Index = ($DateFormatParts | Select-String -Pattern 'y').LineNumber - 1 $TimeParts = $DateTimeParts[1..$($DateTimeParts.Count - 1)] if (@($TimeParts).Count -eq 2) { $TimeFormatParts = (Get-Culture).DateTimeFormat.ShortTimePattern -split ' ' $TT_Index = ($TimeFormatParts | Select-String -Pattern 't').LineNumber - 1 $Time_Index = 1 - $TT_Index $Time = $TimeParts[$Time_Index,$TT_Index] -join ' ' } else { $Time = $TimeParts } $DateTime = [DateTime] $($($DateParts[$Month_Index,$Day_Index,$Year_Index] -join '/') + ' ' + $Time) return $DateTime } #Function to Create XML - Called from AddVSS function function CreateXML($volguid){ $startmin = get-random -minimum 10 -Maximum 60 $endmin = get-random -minimum 10 -Maximum 60 $xml = @" <?xml version="1.0" encoding="UTF-16"?> System 2016-04-22T07:$($startmin):00 true 1 2016-04-22T12:$($endmin):00 true 1 S-1-5-18 HighestAvailable false false PT10M PT1H false false true false false false P3D 5 C:\Windows\system32\vssadmin.exe Create Shadow /AutoRetry=15 /For=\\?\Volume$volguid\ %systemroot%\system32 "@ if ((Test-Path "C:\Tech\VSS\ShadowCopyVolume$volguid.xml") -eq $true) { Remove-item -path "C:\Tech\VSS\ShadowCopyVolume$volguid.xml" } $xml | Out-File -Filepath C:\Tech\VSS\ShadowCopyVolume$volguid.xml } ##In Progress Function - To be used to add an additional schedule ( NOT CURRENTLY USED ) function AddSchedule($time,$xmlfile){ $xmdoc = [xml](get-content $xmlfile) $stringcheck = $time -match '^([0-1][0-9]|[2][0-3]):[0-5][0-9]:[0-5][0-9]$' if ($stringcheck -eq $True) { $date = (get-date).ToString("yyyy-MM-dd") $timesched = "$date" + "T" + "$time" $namespace = "http://schemas.microsoft.com/windows/2004/02/mit/task" $newschedule = $xmdoc.Task.Triggers.AppendChild($xmdoc.CreateElement("CalendarTrigger",$namespace)) $startboundary = $newschedule.AppendChild($xmdoc.CreateElement("StartBoundary",$namespace)) $startboundaryText = $startboundary.AppendChild($xmdoc.CreateTextNode("$timesched")) $Enabled = $newschedule.AppendChild($xmdoc.CreateElement("Enabled",$namespace)) $EnabledText = $Enabled.AppendChild($xmdoc.CreateTextNode("true")) $SchedbyDay = $newschedule.AppendChild($xmdoc.CreateElement("ScheduleByDay",$namespace)) $DaysInterval = $SchedbyDay.AppendChild($xmdoc.CreateElement("DaysInterval",$namespace)) $DaysIntervalText = $DaysInterval.AppendChild($xmdoc.CreateTextNode("1")) $xmdoc.Save($xmlfile) } else { Write-Host "Invalid Time Format" return } } ##This function enables VSS on Local Drives function EnableVSS(){ if ($includecdrive -eq $false){ $LocalDrives = GET-WMIOBJECT -query "SELECT * from win32_logicaldisk where DriveType = 3 and DeviceID <> 'C:'" | Select-Object DeviceID -ExpandProperty DeviceID } else { $LocalDrives = GET-WMIOBJECT -query "SELECT * from win32_logicaldisk where DriveType = 3" | Select-Object DeviceID -ExpandProperty DeviceID } #Define process start to capture info ForEach ($drive in $LocalDrives){ #Remove last ":" from $drive $driveletter = $drive.Substring(0,$drive.length-1) Write-Host $excludeddrives if ($excludeddrives -contains $driveletter){ Write-Host "Success: ShadowCopy Check disabled for $drive" return } #Get GUID of Drive $guidfull = Get-WMIObject -Class Win32_Volume | Select DriveLetter,DeviceID,Label | where {$_.DriveLetter -eq "$drive"} | Select-Object -ExpandProperty DeviceID #remove last "\" $guidfull = $guidfull.Substring(0,$guidfull.length-1) $a,$guid = $guidfull.split("Volume",7) #trim blank lines GUID $guid = $guid | ? {$_.trim() -ne "" } #used for testing #write-host "$driveletter $guid" ## Check if ShadowStorage exists - if not create it $shadowstorage = vssadmin list shadowstorage /for=$drive if ($shadowstorage -match '^.*No items found.*$') { vssadmin add shadowstorage /for=$drive /on=$drive /maxsize=10% vssadmin create shadow /for=$drive } #Run function to create XML CreateXML $guid $query = & "schtasks" /query /tn ShadowCopyVolume$guid 2>&1 | Out-String if ($query -match "ERROR") { schtasks /create /xml "C:\Tech\VSS\ShadowCopyVolume$guid.xml" /tn "ShadowCopyVolume$guid" } else { Write-Host "Schedule for $drive already exists" } } } ###Gather VSS Information (Not Complete) ## Work in Progress function CheckVSS(){ if ($disablevss -eq 1) { Write-Host "Success: ShadowCopy Check disabled for all Drives" return } if ($includecdrive -eq $true -or $includeOSdrive -eq 1){ $LocalDrives = GET-WMIOBJECT -query "SELECT * from win32_logicaldisk where DriveType = 3 and Volumename <> 'Pagefile'" | Select-Object DeviceID -ExpandProperty DeviceID } else { $LocalDrives = GET-WMIOBJECT -query "SELECT * from win32_logicaldisk where DriveType = 3 and DeviceID <> 'C:' and Volumename <> 'Pagefile'" | Select-Object DeviceID -ExpandProperty DeviceID } if ($LocalDrives.length -eq 0) { Write-Host "SUCCESS: VSS Check OK" return } ForEach ($drive in $LocalDrives){ #Remove last ":" from $drive $totalsize = GET-WMIOBJECT -query "SELECT * from win32_logicaldisk where DriveType = 3 and DeviceID = '$($drive)'" | Select-Object {$_.size / 1GB} | Select-Object -ExpandProperty * #write-host $totalsize $driveletter = $drive.Substring(0,$drive.length-1) if ($excludeddrives -contains $driveletter){ Write-Host "Success: ShadowCopy Check disabled for $drive" return } #Get GUID of Drive $guidfull = Get-WMIObject -Class Win32_Volume | Select DriveLetter,DeviceID,Label | where {$_.DriveLetter -eq "$drive"} | Select-Object -ExpandProperty DeviceID #remove last "\" $guidfull = $guidfull.Substring(0,$guidfull.length-1) $a,$guid = $guidfull.split("Volume",7) #trim blank lines GUID $guid = $guid | ? {$_.trim() -ne "" } #used for testing #write-host "$driveletter $guid" $shadows = vssadmin list shadows /for=$drive if ($shadows -match 'No items found that satisfy') { Write-host "ERROR: Drive $drive - No VSS Snapshots found" } else { $latestshadows = $shadows -match 'Contained [0-9].*:.*(AM|PM).*' $latestshadow = $latestshadows[$latestshadows.length - 1] $latestshadowdate = $latestshadowtime = ($latestshadow -split '^.*time:.')[1] $dt = Convert-StringToDateTime ($latestshadowtime) $vssdifference = New-TimeSpan -Start $dt -end (get-date) if ($vssdifference.Hours -ge 24) { Write-host "ERROR: Drive $drive - VSS Snapshot Older than 24 hours ($($vssdifference.hours) hours old)" } else { Write-host "SUCCESS: Last VSS Snapshot for drive $drive - $dt ($($vssdifference.hours) hours old)" } } } } #Set Variables $excludeddrives = '' $disablevss = 0 $100gbcheck = 0 $includeOSdrive = 0 if ((Test-Path -path 'HKLM:\Software\Bremmar\Labtech') -eq $true){ if ((Test-RegistryValue -path 'HKLM:\Software\Bremmar\Labtech' -Value 'DisableVSSCheck') -eq $true){ $disablevss = get-itemproperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Bremmar\Labtech | Select-Object DisableVSSCheck -ExpandProperty DisableVSSCheck | Out-Null } if ((Test-RegistryValue -path 'HKLM:\Software\Bremmar\Labtech' -Value 'ExcludedDrives') -eq $true){ $excludedreg = get-itemproperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Bremmar\Labtech | Select-Object ExcludedDrives -ExpandProperty ExcludedDrives | Out-Null $excludeddrives = $excludedreg -split ";" } if ((Test-RegistryValue -path 'HKLM:\Software\Bremmar\Labtech' -Value '100gbcheck') -eq $true){ $100gbcheck = get-itemproperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Bremmar\Labtech | Select-Object 100gbcheck -ExpandProperty 100gbcheck | Out-Null } if ((Test-RegistryValue -path 'HKLM:\Software\Bremmar\Labtech' -Value 'IncludeOSDrive') -eq $true){ $includeOSdrive = get-itemproperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Bremmar\Labtech | Select-Object IncludeOSDrive -ExpandProperty IncludeOSDrive | Out-Null } } if ( (Test-Path c:\tech\vss) -eq $false) { New-Item -Path C:\Tech\VSS -ItemType Directory } if ($enableVSS -eq $true){ EnableVSS } if ($checkVSS -eq $true) { CheckVSS } if ($checkVSS -eq $false -and $enableVSS -eq $false) { Write-Host "You must specify either -EnableVSS or -CheckVSS" }