https://github.com/maxrunsoftware/huc
Various command line utilities
https://github.com/maxrunsoftware/huc
csharp csv email ftp ftps huc sftp sql
Last synced: 2 months ago
JSON representation
Various command line utilities
- Host: GitHub
- URL: https://github.com/maxrunsoftware/huc
- Owner: maxrunsoftware
- License: apache-2.0
- Created: 2021-03-17T23:43:41.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2024-03-21T15:15:07.000Z (about 2 years ago)
- Last Synced: 2026-01-05T05:43:26.189Z (3 months ago)
- Topics: csharp, csv, email, ftp, ftps, huc, sftp, sql
- Language: C#
- Homepage:
- Size: 2.06 MB
- Stars: 12
- Watchers: 3
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# HUC: Various Command Line Tools To Make Your Life Easier
## [Max Run Software](https://www.maxrunsoftware.com)
There is currently a 2.0 branch in development. If you have a feature request feel free to submit an enhancement and we'll try and get it added to the 2.0 branch.
HUC is a simple to use open source command line tool for performing various tasks.
It is a self contained executable built on DotNet 5 and has builds available for Windows, Mac, and Linux
Get list of commands
```
huc
```
Get list of parameters for a command
```
huc Sql help
huc FtpPut help
huc Table help
huc help
```
## Operations
- [FTP / FTPS / SFTP](#ftp-ftps-sftp)
- [SSH](#ssh)
- [Email](#email)
- [Microsoft SQL / MySQL / Oracle](#sql)
- [Querying](#sql)
- [Importing Tab Delimited Data](#sql)
- [Exporting Binary Data to Files](#sql)
- [Downloading Files Based on a SQL Query](#sql)
- [ZIP](#zip)
- [Windows Task Scheduler Management](#windows-task-scheduler)
- [List Tasks](#windows-task-scheduler)
- [Add Task](#windows-task-scheduler)
- [Remove Task](#windows-task-scheduler)
- [File Operations](#file-operations)
- [Tab Delimited File Data Conversion](#file-operations)
- [Text Replacement](#file-operations)
- [Appending](#file-operations)
- [Split](#file-operations)
- [Generate File Checksums](#file-operations)
- [Encryption and Decryption](#file-operations)
- [Generate Random Data](#file-operations)
- [Directory Operations](#directory-operations)
- [List Directory to Tab Delimited File](#directory-operations)
- [Get Directory Size](#directory-operations)
- [Flatten Directory Structure](#directory-operations)
- [Remove Empty Directories](#directory-operations)
- [Web Server](#web-server)
- [Active Directory](#active-directory)
- [List Objects](#active-directory)
- [List Object Details](#active-directory)
- [List Users / Groups / Computers](#active-directory)
- [List Users Of Group](#active-directory)
- [Add User / Group / OU](#active-directory)
- [Add User To Group](#active-directory)
- [Remove User / Group / OU](#active-directory)
- [Remove User From Group](#active-directory)
- [Move User / Group](#active-directory)
- [Enable / Disable User](#active-directory)
- [Change User Password](#active-directory)
- [Google Sheets](#google-sheets)
- [Query](#google-sheets)
- [Import Into a Sheet](#google-sheets)
- [Add Row to Sheet](#google-sheets)
- [Clear Sheet](#google-sheets)
- [Format Cells](#google-sheets)
- [VMware](#vmware)
- [List VMware Objects](#vmware)
- [List VMware Objects to JSON](#vmware)
- [Query Raw JSON Data](#vmware)
- [Perform Operations On VMs](#vmware)
- [Generation of Public and Private Keys](#generate-public-and-private-keys)
- [Using a Properties File](#using-a-properties-file)
- [Helper Utility Functions](#helper-functions)
- [Logging](#logging)
___
### Email
Send an email
```
huc email -h="smtp.somerelay.org" -from="someone@aol.com" -to="grandma@aol.com" -s="Grandpa Birthday" -b="Tell Grandpa/nHAPPY BIRTHDAY!"
```
Send an email with CC and BCC and attachments
```
huc email -h="smtp.somerelay.org" -to="person1@aol.com;person2@aol.com" -cc="person3@aol.com" -bcc="person4@aol.com" -s="Some subject text" -b="Some text for body" myAttachedFile1.csv myAttachedFile2.txt
```
Send an email with text templating
```
huc email -h="smtp.somerelay.org" -to="person1@aol.com" -t1="Sandy" -t2="some other text" -s="Email for {t1}" -b="Hi {t1},\nHere is your {t2}"
```
___
### Delimited Files
Convert tab delimited file to csv delimited file using defaults
```
cp Orders.txt Orders.csv
huc table Orders.csv
```
Convert tab delimited file to csv delimited file using specific delimiters and excluding the header row
```
cp Orders.txt Orders.csv
huc table -hd=pipe -hq=single -he=true -dd=pipe -dq=single -de=false Orders.csv
```
Convert tab delimited file to HTML table using defaults
```
cp Orders.txt Orders.html
huc tablehtml Orders.html
```
Convert tab delimited file to HTML table embeddeding a custom CSS file and Javascript file
```
cp Orders.txt Orders.html
huc tablehtml -css=MyStyleSheet.css -js=MyJavascriptFile.js Orders.html
```
Convert tab delimited file to XML
```
cp Orders.txt Orders.xml
huc tablexml Orders.xml
```
Convert tab delimited file to JSON
```
cp Orders.txt Orders.json
huc tablejson Orders.json
```
Convert tab delimited file to fixed width file
```
huc tableFixedWidth Orders.txt 10 20 15 9 6 0 4 200
```
___
### FTP FTPS SFTP
List files in default directory
```
huc ftplist -h=192.168.1.5 -u=testuser -p=testpass
huc ftplist -e=explicit -h=192.168.1.5 -u=testuser -p=testpass
huc ftplist -e=implicit -h=192.168.1.5 -u=testuser -p=testpass
huc ftplist -e=ssh -h=192.168.1.5 -u=testuser -p=testpass
```
Recursively list files in /home/user directory
```
huc ftplist -h=192.168.1.5 -u=testuser -p=testpass -r "/home/user"
huc ftplist -e=explicit -h=192.168.1.5 -u=testuser -p=testpass -r "/home/user"
huc ftplist -e=implicit -h=192.168.1.5 -u=testuser -p=testpass -r "/home/user"
huc ftplist -e=ssh -h=192.168.1.5 -u=testuser -p=testpass -r "/home/user"
```
Get a file from a FTP/FTPS/SFTP server
```
huc ftpget -h=192.168.1.5 -u=testuser -p=testpass remotefile.txt
huc ftpget -e=explicit -h=192.168.1.5 -u=testuser -p=testpass remotefile.txt
huc ftpget -e=implicit -h=192.168.1.5 -u=testuser -p=testpass remotefile.txt
huc ftpget -e=ssh -h=192.168.1.5 -u=testuser -p=testpass remotefile.txt
```
Put a file on a FTP/FTPS/SFTP server
```
huc ftpput -h=192.168.1.5 -u=testuser -p=testpass localfile.txt
huc ftpput -e=explicit -h=192.168.1.5 -u=testuser -p=testpass localfile.txt
huc ftpput -e=implicit -h=192.168.1.5 -u=testuser -p=testpass localfile.txt
huc ftpput -e=ssh -h=192.168.1.5 -u=testuser -p=testpass localfile.txt
```
___
### SQL
Query Microsoft SQL server and output tab delimited data file
```
huc sql -c="Server=192.168.1.5;Database=NorthWind;User Id=testuser;Password=testpass;" -s="SELECT TOP 100 * FROM Orders" Orders100.txt
```
Query Microsoft SQL server and output multiple tab delimited data files from multiple result sets
```
huc sql -c="Server=192.168.1.5;Database=NorthWind;User Id=testuser;Password=testpass;" -s="SELECT * FROM Orders; SELECT * FROM Employees" Orders.txt Employees.txt
```
Query Microsoft SQL server with SQL script file and output tab delimited data file
```
printf "SELECT TOP 100 *\nFROM Orders" > mssqlscript.sql
huc sql -c="Server=192.168.1.5;Database=NorthWind;User Id=testuser;Password=testpass;" -f="mssqlscript.sql" OrdersFromScript.txt
```
Upload tab delimited file into a SQL server table
```
huc sqlload -c="Server=192.168.1.5;Database=NorthWind;User Id=testuser;Password=testpass;" -d=NorthWind -s=dbo -t=TempOrders Orders.txt
```
Upload tab delimited file into a SQL server table and include the file row number and a time stamp, dropping the table if it exists already
```
huc sqlload -c="Server=192.168.1.5;Database=NorthWind;User Id=testuser;Password=testpass;" -drop -rowNumberColumnName=RowNumber -currentUtcDateTimeColumnName=UploadTime -d=NorthWind -s=dbo -t=TempOrders Orders.txt
```
___
### Zip
Zipping a file
```
huc zip myOuputFile.zip someLocalFile.txt
```
Zipping multiple files
```
huc zip myOuputFile.zip *.txt *.csv
```
___
### Windows Task Scheduler
List all tasks on scheduler
```
huc WindowsTaskSchedulerList -h="localhost" -u="administrator" -p="password" ALL
```
List a specific task MyTask on scheduler with details
```
huc WindowsTaskSchedulerList -h="localhost" -u="administrator" -p="password" -d /myTaskFolder/MyTask
```
Create a Windows Task Scheduler job to run every day at 4:15am
```
huc WindowsTaskSchedulerAdd -h="localhost" -u="administrator" -p="password" -taskUsername="system" -tw="c:\temp" -t1="DAILY 04:15" -tn="MyTask" "C:\temp\RunMe.bat"
```
Create a Windows Task Scheduler job to run every hour at 35 minutes after the hour
```
huc WindowsTaskSchedulerAdd -h="localhost" -u="administrator" -p="password" -taskUsername="system" -tw="c:\temp" -t1="HOURLY 35" -tn="MyTask" "C:\temp\RunMe.bat"
```
Create a Windows Task Scheduler job to run Monday and Wednesday at 7:12pm
```
huc WindowsTaskSchedulerAdd -h="localhost" -u="administrator" -p="password" -taskUsername="system" -tw="c:\temp" -t1="MONDAY 19:12" -t2="WEDNESDAY 19:12" -tn="MyTask" "C:\temp\RunMe.bat"
```
Delete a Windows Task Scheduler job
```
huc WindowsTaskSchedulerRemove -h="localhost" -u="administrator" -p="password" MyTask
```
___
### File Operations
Replace all instances of Person with Steve in the file mydoc.txt
```
huc FileReplaceString "Person" "Steve" mydoc.txt
```
Append files file1.txt and file2.txt to mainfile.txt
```
huc FileAppend mainfile.txt file1.txt file2.txt
```
Split a file on the new line character into 3 other files
```
huc FileSplit Orders.txt Orders1.txt Orders2.txt Orders3.txt
```
Generate MD5 checksum for file MyFile.zip
```
huc FileChecksum MyFile.zip
```
Generate SHA512 checksum for files *.txt
```
huc FileChecksum -t=SHA512 *.txt
```
Encrypt file with password
```
huc FileEncrypt -p=password data.txt data.encrypted
```
Decrypt file with password
```
huc FileDecrypt -p=password data.encrypted dataDecrypted.txt
```
Encrypt file with public key
```
huc FileEncrypt -pk=MyPublicKey.txt data.txt data.encrypted
```
Decrypt file with private key
```
huc FileDecrypt -pk=MyPrivateKey.txt data.encrypted dataDecrypted.txt
```
Generate file with random data
```
huc GenerateRandomFile testdata.txt
huc GenerateRandomFile -l=1000000 testdata1.txt testdata2.txt testdata3.txt
```
___
### Directory Operations
List some file and directory information to a tab delimited file
```
huc DirectoryList -creationTime -lastAccessTimeUtc -lastWriteTime -n -nf -p -s -recursiveDepth=10 -pattern=*.cs C:\temp\MyDirectory mydatafile.txt
```
Get the size of a directory
```
huc DirectorySize C:\temp\MyDirectory
```
Move all files in all subdirectories of target directory into the target directory, but don't overwrite if the file already exists
```
huc DirectoryFlatten C:\temp\MyDirectory
```
Move all files in all subdirectories of target directory into the target directory, and keep the newest file
```
huc DirectoryFlatten -c=KeepNewest C:\temp\MyDirectory
```
Deletes empty subdirectories recursively
```
huc DirectoryRemoveEmpty C:\temp\MyDirectory
```
___
### Web Server
Start webserver and host files out of the current directory
```
huc WebServer .
```
Start webserver on port 80 and host files out of c:\www directory
```
huc WebServer -o=80 c:\www
```
Start webserver on port 80 and host files out of c:\www directory and require a username and password
```
huc WebServer -o=80 -u=user -p=testpass c:\www
```
___
### SSH
Issue LS command
```
huc SSH -h=192.168.1.5 -u=testuser -p=testpass "ls"
```
Change directory and issue LS command with options
```
huc SSH -h=192.168.1.5 -u=testuser -p=testpass "cd someDirectory; ls -la;"
```
___
### Active Directory
List all objects and their attributes to a tab delimited file
```
huc ActiveDirectoryList -h=192.168.1.5 -u=administrator -p=testpass adlist.txt
```
List various object types
```
huc ActiveDirectoryListObjects -h=192.168.1.5 -u=administrator -p=testpass ?teve*
huc ActiveDirectoryListUsers -h=192.168.1.5 -u=administrator -p=testpass
huc ActiveDirectoryListGroups -h=192.168.1.5 -u=administrator -p=testpass Group*
huc ActiveDirectoryListComputers -h=192.168.1.5 -u=administrator -p=testpass
```
List various object types and display specific LDAP fields
```
huc ActiveDirectoryListObjects -h=192.168.1.5 -u=administrator -p=testpass -pi=*Name
huc ActiveDirectoryListUsers -h=192.168.1.5 -u=administrator -p=testpass -pi=DistinguishedName,OganizationalUnit,ObjectName,ObjectGuid ?teve*
huc ActiveDirectoryListGroups -h=192.168.1.5 -u=administrator -p=testpass -pi=*Name,Object*
huc ActiveDirectoryListComputers -h=192.168.1.5 -u=administrator -p=testpass -pi=* MyComputer?
```
List additional details for an Active Directory object
```
huc ActiveDirectoryListObjectDetails -h=192.168.1.5 -u=administrator -p=testpass Administrator
huc ActiveDirectoryListObjectDetails -h=192.168.1.5 -u=administrator -p=testpass Users
huc ActiveDirectoryListObjectDetails -h=192.168.1.5 -u=administrator -p=testpass ?teve*
```
Change a user's password (note: requires LDAPS certificate to be installed on AD server or running HUC on the AD server itself)
```
huc ActiveDirectoryChangePassword -h=192.168.1.5 -u=administrator -p=testpass testuser newpassword
```
Add User
```
huc ActiveDirectoryAddUser -h=192.168.1.5 -u=administrator -p=testpass testuser
huc ActiveDirectoryAddUser -h=192.168.1.5 -u=administrator -p=testpass -firstname="steve" -lastname="foster" testuser
```
Add Group
```
huc ActiveDirectoryAddGroup -h=192.168.1.5 -u=administrator -p=testpass testgroup
huc ActiveDirectoryAddGroup -h=192.168.1.5 -u=administrator -p=testpass -gt=GlobalSecurityGroup testgroup
```
Delete User
```
huc ActiveDirectoryRemoveUser -h=192.168.1.5 -u=administrator -p=testpass testuser
```
Delete Group
```
huc ActiveDirectoryRemoveGroup -h=192.168.1.5 -u=administrator -p=testpass testgroup
```
Move User
```
huc ActiveDirectoryMoveUser -h=192.168.1.5 -u=administrator -p=testpass testuser MyNewOU
```
Move Group
```
huc ActiveDirectoryMoveGroup -h=192.168.1.5 -u=administrator -p=testpass testgroup MyNewOU
```
Add user to group
```
huc ActiveDirectoryAddUserToGroup -h=192.168.1.5 -u=administrator -p=testpass testuser MyGroup1 SomeOtherGroup
```
Remove user from group
```
huc ActiveDirectoryRemoveUserFromGroup -h=192.168.1.5 -u=administrator -p=testpass testuser MyGroup1
```
Enable user
```
huc ActiveDirectoryEnableUser -h=192.168.1.5 -u=administrator -p=testpass testuser
```
Disable user
```
huc ActiveDirectoryDisableUser -h=192.168.1.5 -u=administrator -p=testpass testuser
```
Disable users who have not logged on in the past 7 days
```
huc ActiveDirectoryDisableUsers -h=192.168.1.5 -u=administrator -p=testpass -l=7
```
___
### Google Sheets
For setting up the Google account see...\
https://medium.com/@williamchislett/writing-to-google-sheets-api-using-net-and-a-services-account-91ee7e4a291 \
\
Clear all data from a Google Sheet tab named Sheet1 (sheet ID is in the URL)
```
huc GoogleSheetsClear -k="MyGoogleAppKey.json" -a="MyApplicationName" -id="dkjfsd328sdfuhscbjcds8hfjndsfdsfdsfe" -s="Sheet1"
```
Clear all data from the first Google Sheet tab
```
huc GoogleSheetsClear -k="MyGoogleAppKey.json" -a="MyApplicationName" -id="dkjfsd328sdfuhscbjcds8hfjndsfdsfdsfe"
```
Clear the first sheet tab and upload Orders.txt tab delimited file to it
```
huc GoogleSheetsLoad -k="MyGoogleAppKey.json" -a="MyApplicationName" -id="dkjfsd328sdfuhscbjcds8hfjndsfdsfdsfe" Orders.txt
```
Add a row to first sheet with the values "AA", blank, "CC"
```
huc GoogleSheetsAddRow -k="MyGoogleAppKey.json" -a="MyApplicationName" -id="dkjfsd328sdfuhscbjcds8hfjndsfdsfdsfe" AA null CC
```
Make the first row of data have red text, blue background, and bold
```
huc GoogleSheetsFormatCells -k="MyGoogleAppKey.json" -a="MyApplicationName" -id="dkjfsd328sdfuhscbjcds8hfjndsfdsfdsfe" -width=100 -b -fc=Red -bc=Blue
```
Query all data from first sheet and output it to a tab delimited file MyFile.txt
```
huc GoogleSheetsQuery -k="MyGoogleAppKey.json" -a="MyApplicationName" -id="dkjfsd328sdfuhscbjcds8hfjndsfdsfdsfe" MyFile.txt
```
___
### Generate Public and Private Keys
Generate RSA public and private key files
```
huc GenerateKeyPair MyPublicKey.txt MyPrivateKey.txt
```
Generate RSA public and private key files with RSA length 4096
```
huc GenerateKeyPair -l=4096 MyPublicKey.txt MyPrivateKey.txt
```
___
### VMware
Query various information in a VCenter 6.7+ infrastructure
```
huc VMwareList -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass DataCenter VM StoragePolicy
huc VMwareList -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass VM_Quick
huc VMwareList -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass VM_WithoutTools
huc VMwareList -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass VM_PoweredOff
huc VMwareList -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass VM_IsoAttached
```
Query raw JSON data from VCenter 6.7+ infrastructure
```
huc VMwareQuery -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass /rest/vcenter/host
huc VMwareQuery -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass /rest/vcenter/vm
huc VMwareQuery -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass /rest/vcenter/vm/vm-1692
```
Query all infrastructure data to a JSON file
```
huc VMwareQueryJSON -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass MyDataFile.json
```
Perform various actions on a VM
```
huc VMwareVM -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass MyVM None
huc VMwareVM -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass MyVM Shutdown
huc VMwareVM -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass MyVM Reboot
huc VMwareVM -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass MyVM Standby
huc VMwareVM -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass MyVM Reset
huc VMwareVM -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass MyVM Start
huc VMwareVM -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass MyVM Stop
huc VMwareVM -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass MyVM Suspend
huc VMwareVM -h=192.168.1.5 -u=testuser@vsphere.local -p=mypass MyVM DetachISOs
```
___
### Putting It All Together
Query SQL server, convert the data, sftp it, zip it, then email the data
```
huc sql -c="Server=192.168.1.5;Database=NorthWind;User Id=testuser;Password=testpass;" -s="SELECT * FROM Orders" orders.csv
huc table -hd=comma -hq=none -dd=comma -dq=none orders.csv
huc ftpput -e=ssh -h=192.168.1.5 -u=testuser -p=testpass orders.csv
huc zip orders.zip "*.csv"
huc email -h="smtp.somerelay.org" -from="me@aol.com" -to="person@aol.com" -s="Orders data" -b="Attached is the order data" "*.zip"
```
___
### Using a Properties File
When huc first runs, it attempts to generate a huc.properties file in the directory of the executable. This file contains all of the parameters for each command. You can populate this file with certain properties so you don't have to type them in every time. The huc program will first check if a parameter was supplied at the command line. If not, if will then check the properties file (commandline overrides properties file). If still not found it will attempt to use a default value for some parameters (not all, some are required to be provided).
So assuming a properties file of...
```properties
sql.connectionString=Server=192.168.1.5;Database=NorthWind;User Id=testuser;Password=testpass;
table.headerDelimiter=comma
table.headerQuoting=none
table.dataDelimiter=comma
table.dataQuoting=none
ftpput.host=192.168.1.5
ftpput.encryptionMode=SSH
ftpput.username=testuser
ftpput.password=testpass
email.host=smtp.somerelay.org
email.from=me@aol.com
```
The commands now become...
```
huc sql -s="SELECT * FROM Orders" orders.csv
huc table orders.csv
huc ftpput orders.csv
huc zip orders.zip "*.csv"
huc email -to="person@aol.com" -s="Orders data" -b="Attached is the order data" "*.zip"
```
___
### Helper Functions
Show current properties set in the properties file
```
huc ShowProperties
```
Show all available properties
```
huc ShowProperties -a
```
Convert Binary file to Base16
```
huc ConvertBinaryToBase16 myinputfile.txt myoutputfile.txt
```
Convert Binary file to Base64
```
huc ConvertBinaryToBase64 myinputfile.txt myoutputfile.txt
```
Get a web file
```
huc wget https://github.com/Steven-D-Foster/huc/releases/download/v1.3.0/huc-linux.zip
```
Get a web page
```
huc wget https://github.com github.txt
```
Show internet time
```
huc time
```
Show drift of local clock compared to internet time
```
huc time -d
```
Show all of the colors available for commands that take a color parameter
```
huc colors
```
Show details for a specific color
```
huc colors red
```
Test JSAS service
```
huc jsas https://192.168.0.10 MyPassword MyData
huc jsas https://192.168.0.10 MyPassword MyData NewFile.txt
```
Encrypt Password to use in huc.properties file
```
huc EncodePassword mySecretPassword
```
___
### Logging
HUC supports various logging. At the console level HUC supports ```INFO```, ```DEBUG```, and ```TRACE``` logging levels. By default the logging level is ```INFO```. To enable ```DEBUG``` level logging at the console, specify the ```-debug``` parameter at the command line. To enable ```TRACE``` level logging, specify the ```-trace``` parameter at the command line.
HUC also supports logging to a file. To enable file logging, use the parameters ```Log.FileLevel``` and ```Log.FileName``` in the ```huc.properties``` file to specify the log level (```CRITICAL```, ```ERROR```, ```WARN```, ```INFO```, ```DEBUG```, ```TRACE```) and the filename of the file to write out to.