Everything you wanted to know about PSCustomObject

  • Article
  • 11/17/2022
  • 8 minutes to read

In this article

PSCustomObject is a great tool to add into your PowerShell tool belt. Let’s start with the basics and work our way into the more advanced features. The idea behind using a PSCustomObject is to have a simple way to create structured data. Take a look at the first example and you’ll have a better idea of what that means.

Creating a PSCustomObject

I love using [PSCustomObject] in PowerShell. Creating a usable object has never been easier. Because of that, I’m going to skip over all the other ways you can create an object but I need to mention that most of these examples are PowerShell v3.0 and newer.

$myObject = [PSCustomObject]@{ Name = ‘Kevin’ Language = ‘PowerShell’ State = ‘Texas’ }

This method works well for me because I use hashtables for just about everything. But there are times when I would like PowerShell to treat hashtables more like an object. The first place you notice the difference is when you want to use Format-Table or Export-CSV and you realize that a hashtable is just a collection of key/value pairs.

You can then access and use the values like you would a normal object.

$myObject.Name

Converting a hashtable

While I am on the topic, did you know you could do this:

$myHashtable = @{ Name = ‘Kevin’ Language = ‘PowerShell’ State = ‘Texas’ } $myObject = [pscustomobject]$myHashtable

I do prefer to create the object from the start but there are times you have to work with a hashtable first. This example works because the constructor takes a hashtable for the object properties. One important note is that while this method works, it isn’t an exact equivalent. The biggest difference is that the order of the properties isn’t preserved.

If you want to preserve the order, see Ordered hashtables.

Legacy approach

You may have seen people use New-Object to create custom objects.

$myHashtable = @{ Name = ‘Kevin’ Language = ‘PowerShell’ State = ‘Texas’ } $myObject = New-Object -TypeName PSObject -Property $myHashtable

This way is quite a bit slower but it may be your best option on early versions of PowerShell.

Saving to a file

I find the best way to save a hashtable to a file is to save it as JSON. You can import it back into a [PSCustomObject]

$myObject | ConvertTo-Json -depth 1 | Set-Content -Path $Path $myObject = Get-Content -Path $Path | ConvertFrom-Json

I cover more ways to save objects to a file in my article on The many ways to read and write to files.

Working with properties

Adding properties

You can still add new properties to your PSCustomObject with Add-Member.

$myObject | Add-Member -MemberType NoteProperty -Name ‘ID’ -Value ‘KevinMarquette’ $myObject.ID

Remove properties

You can also remove properties off of an object.

$myObject.psobject.properties.remove(‘ID’)

The .psobject is an intrinsic member that gives you access to base object metadata. For more information about intrinsic members, see about_Intrinsic_Members.

Enumerating property names

Sometimes you need a list of all the property names on an object.

$myObject | Get-Member -MemberType NoteProperty | Select -ExpandProperty Name

We can get this same list off of the psobject property too.

$myobject.psobject.properties.name

Dynamically accessing properties

I already mentioned that you can access property values directly.

$myObject.Name

You can use a string for the property name and it will still work.

$myObject.’Name’

We can take this one more step and use a variable for the property name.

$property = ‘Name’ $myObject.$property

I know that looks strange, but it works.

Convert PSCustomObject into a hashtable

To continue on from the last section, you can dynamically walk the properties and create a hashtable from them.

$hashtable = @{} foreach( $property in $myobject.psobject.properties.name ) { $hashtable[$property] = $myObject.$property }

Testing for properties

If you need to know if a property exists, you could just check for that property to have a value.

if( $null -ne $myObject.ID )

But if the value could be $null you can check to see if it exists by checking the psobject.properties for it.

if( $myobject.psobject.properties.match(‘ID’).Count )

Adding object methods

If you need to add a script method to an object, you can do it with Add-Member and a ScriptBlock. You have to use the this automatic variable reference the current object. Here is a scriptblock to turn an object into a hashtable. (same code form the last example)

$ScriptBlock = { $hashtable = @{} foreach( $property in $this.psobject.properties.name ) { $hashtable[$property] = $this.$property } return $hashtable }

Then we add it to our object as a script property.

$memberParam = @{ MemberType = “ScriptMethod” InputObject = $myobject Name = “ToHashtable” Value = $scriptBlock } Add-Member @memberParam

Then we can call our function like this:

$myObject.ToHashtable()

Objects vs Value types

Objects and value types don’t handle variable assignments the same way. If you assign value types to each other, only the value get copied to the new variable.

$first = 1 $second = $first $second = 2

In this case, $first is 1 and $second is 2.

Object variables hold a reference to the actual object. When you assign one object to a new variable, they still reference the same object.

$third = [PSCustomObject]@{Key=3} $fourth = $third $fourth.Key = 4

Because $third and $fourth reference the same instance of an object, both $third.key and $fourth.Key are 4.

psobject.copy()

If you need a true copy of an object, you can clone it.

$third = [PSCustomObject]@{Key=3} $fourth = $third.psobject.copy() $fourth.Key = 4

Clone creates a shallow copy of the object. They have different instances now and $third.key is 3 and $fourth.Key is 4 in this example.

I call this a shallow copy because if you have nested objects (objects with properties contain other objects), only the top-level values are copied. The child objects will reference each other.

PSTypeName for custom object types

Now that we have an object, there are a few more things we can do with it that may not be nearly as obvious. First thing we need to do is give it a PSTypeName. This is the most common way I see people do it:

$myObject.PSObject.TypeNames.Insert(0,”My.Object”)

I recently discovered another way to do this from this post by /u/markekraus. I did a little digging and more posts about the idea from Adam Bertram and Mike Shepard where they talk about this approach that allows you to define it inline.

$myObject = [PSCustomObject]@{ PSTypeName = ‘My.Object’ Name = ‘Kevin’ Language = ‘PowerShell’ State = ‘Texas’ }

I love how nicely this just fits into the language. Now that we have an object with a proper type name, we can do some more things.

Note

You can also create custom PowerShell types using PowerShell classes. For more information, see PowerShell Class Overview.

Using DefaultPropertySet (the long way)

PowerShell decides for us what properties to display by default. A lot of the native commands have a .ps1xml formatting file that does all the heavy lifting. From this post by Boe Prox, there’s another way for us to do this on our custom object using just PowerShell. We can give it a MemberSet for it to use.

$defaultDisplaySet = ‘Name’,’Language’ $defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet(‘DefaultDisplayPropertySet’,[string[]]$defaultDisplaySet) $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet) $MyObject | Add-Member MemberSet PSStandardMembers $PSStandardMembers

Now when my object just falls to the shell, it will only show those properties by default.

Update-TypeData with DefaultPropertySet

This is nice but I recently saw a better way when watching PowerShell unplugged 2016 with Jeffrey Snover & Don Jones. Jeffrey was using Update-TypeData to specify the default properties.

$TypeData = @{ TypeName = ‘My.Object’ DefaultDisplayPropertySet = ‘Name’,’Language’ } Update-TypeData @TypeData

That is simple enough that I could almost remember it if I didn’t have this post as a quick reference. Now I can easily create objects with lots of properties and still give it a nice clean view when looking at it from the shell. If I need to access or see those other properties, they’re still there.

$myObject | Format-List *

Update-TypeData with ScriptProperty

Something else I got out of that video was creating script properties for your objects. This would be a good time to point out that this works for existing objects too.

$TypeData = @{ TypeName = ‘My.Object’ MemberType = ‘ScriptProperty’ MemberName = ‘UpperCaseName’ Value = {$this.Name.toUpper()} } Update-TypeData @TypeData

You can do this before your object is created or after and it will still work. This is what makes this different then using Add-Member with a script property. When you use Add-Member the way I referenced earlier, it only exists on that specific instance of the object. This one applies to all objects with this TypeName.

Function parameters

You can now use these custom types for parameters in your functions and scripts. You can have one function create these custom objects and then pass them into other functions.

param( [PSTypeName(‘My.Object’)]$Data )

PowerShell requires that the object is the type you specified. It throws a validation error if the type doesn’t match automatically to save you the step of testing for it in your code. A great example of letting PowerShell do what it does best.

Function OutputType

You can also define an OutputType for your advanced functions.

function Get-MyObject { [OutputType(‘My.Object’)] [CmdletBinding()] param ( …

The OutputType attribute value is only a documentation note. It isn’t derived from the function code or compared to the actual function output.

The main reason you would use an output type is so that meta information about your function reflects your intentions. Things like Get-Command and Get-Help that your development environment can take advantage of. If you want more information, then take a look at the help for it: about_Functions_OutputTypeAttribute.

With that said, if you’re using Pester to unit test your functions then it would be a good idea to validate the output objects match your OutputType. This could catch variables that just fall to the pipe when they shouldn’t.

Closing thoughts

The context of this was all about [PSCustomObject], but a lot of this information applies to objects in general.

I have seen most of these features in passing before but never saw them presented as a collection of information on PSCustomObject. Just this last week I stumbled upon another one and was surprised that I had not seen it before. I wanted to pull all these ideas together so you can hopefully see the bigger picture and be aware of them when you have an opportunity to use them. I hope you learned something and can find a way to work this into your scripts.


Everything you wanted to know about PSCustomObject

If you have any question please CONTACT  Us
Email us at:  [email protected]
Call US : (832) 722-8074

Don’t Forget to Visit our Shop 

For reliable and quality Managed IT Services and VoIP, Contact Precise Business Solutions 

Chiefs vs. Bengals how to watch: Time, watch 2023 AFC

Let’s not waste time with a long preamble: It’s Championship Sunday in the NFL. In the AFC Championship, the No. 1 seed and AFC West champion Kansas City Chiefs will play host to the No. 3 seed and AFC North champion Cincinnati Bengals. 

These two teams met earlier this season, as well as in the conference championship game last year. Cincinnati won both of those contests, but the Chiefs are once again working with home-field advantage. Before we break down the matchup, here’s a look at how you can watch the game. 

How to watch 

Date: Sunday, Jan. 29 | Time: 6:30 p.m. ET
Location: GEHA Field at Arrowhead Stadium (Kansas City, Missouri)
TV: CBS | Stream: Paramount+ (click here)
Odds: Chiefs -1.5, O/U 48

Featured Game | Kansas City Chiefs vs. Cincinnati Bengals

Powered by Caesars Sportsbook

When the Bengals have the ball

Last week, the big story going into the Bengals’ game against the Buffalo Bills was the offensive line. How would the group in front of Joe Burrow hold up while down three starters, and counting on the likes of Jackson Carman, Hakeem Adeniji, and Max Scharping? As it turned out, it held up just fine. 

Burrow was pressured on only 31.6% of his dropbacks, according to Tru Media, a well-below average rate. Bengals ball-carriers averaged an impressive 1.94 yards per carry before contact, a significant improvement from the 1.26 per carry they clocked during the regular season. Not only did the Buffalo defensive line not dominate the game; it was largely dominated. Cincinnati controlled the line of scrimmage from the jump. 

Now, the question becomes whether the offensive line can do it again. The Chiefs actually pressured opposing quarterbacks at a higher rate (35.7%) during the regular season than did the Bills (33.7%). And given that Buffalo was without Von Miller last week, the Chiefs also have a higher-caliber individual threat (Chris Jones) than any the Bills brought to the table a week ago. There is good news and bad news for the Bengals on that front. The good is that the two remaining starters along the offensive line (Ted Karras and Cordell Volson) both play on the interior, where Jones does his work. The bad is that Scharping also plays on the interior, and the Chiefs can align Jones wherever they want to generate advantageous matchups.

player headshot team logo

The real way the Bengals can neutralize the rush, though, is through Burrow. Against Buffalo, Burrow got the ball out in an average of 2.57 seconds, according to Tru Media, a figure right in line with his season-long average of 2.55 seconds to throw. Only Tom Brady (2.33 seconds) got rid of the ball faster this season, and only Brady released a higher share of his throws (55.3%) within 2.5 seconds of the snap than Burrow (55.0%). Burrow’s superpower is his ability to quickly decide where he is going with the ball and get it out of his hands when the situation calls for him to do so, but he also has the extended play ability that the league’s other superstar quarterbacks bring to the table. 

It helps that he has arguably the best cadre of weapons in the league — or at least in his conference — to choose from. Ja’Marr Chase and Tee Higgins give him two alpha No. 1 receivers, each of whom can both make contested grabs and create yards after the catch. Chase is nearly impossible to bring down with the first tackler, and the Bengals take advantage of that fact by getting him the ball on screens and crossers so he can attack defenders with a head of steam. In the first matchup between these two teams, the Chiefs too often left their inexperienced corners on an island with Chase or Higgins on the outside, and Burrow repeatedly made them pay for it. Steve Spagnuolo needs to come with a different plan of attack this time around.

player headshot team logo

It will be interesting to see whether the Chiefs slide L’Jarius Sneed back outside and re-insert Trent McDuffie into the slot, after they switched those positions back last week against the Jaguars. Jacksonville’s top receiving threat was Christian Kirk, so the Chiefs moved Sneed into the slot again. The top threats for Cincinnati remain Chase and Higgins, not Tyler Boyd, so it might make sense to get Sneed back to the perimeter and allow McDuffie to try to play physically against Boyd inside. Spagnuolo should still be careful to give Sneed and Jaylen Watson appropriate help, though, or Burrow will aggressively work the one-on-one matchups and trust his guys to win the ball in the air. Being able to send enough bodies after Burrow to generate pressure while also keeping enough in coverage to ensure they don’t get smoked on the outside will be a tricky balance. 

The Bengals got a lot better at running the ball once they moved away from the way they wanted to run the ball at the beginning of the season. They were an under-center, outside-zone team early on, and it was extremely vanilla. They moved to almost an exclusively shotgun offense early in the year, and it allowed them to get a bit more unpredictability in their rushing attack. Kansas City finished a respectable 15th in rush defense DVOA this season, per Football Outsiders, so this is not one of those units where you can just run the ball down its throats if you want to, like it has been occasionally in seasons past. Joe Mixon and Samaje Perine surely have their role to play here, but the Bengals are best off doing what they do best: letting Burrow control the game by playing point guard from the pocket.

When the Chiefs have the ball

Well, this all really comes down to one question: Is Patrick Mahomes healthy enough to play like Patrick Mahomes? Honestly, I have no idea, and I think anyone (other than maybe the Chiefs’ team doctors) who tells you they know with any degree of certainty is lying. 

So, let’s try to figure out what we do know: 

  • We know Bengals defensive coordinator Lou Anarumo will once again have a bespoke game plan to deal with Mahomes and the Chiefs’ passing attack. 
  • We know that game plan will likely differ at least a bit from what we saw back in Week 13, which itself differed a bit from what we saw in last year’s AFC title game. 
  • We know the Kansas City passing game flows through Travis Kelce, and the Bengals will likely try to take him away by using Tre Flowers to get physical with him near the line of scrimmage and sending other coverage defenders his way farther down the field. 
  • We know the Chiefs re-engineered their offense this past offseason to counteract the type of defenses the Bengals and other teams used against them last year, getting players to fit in specific roles to take their quick game, straight dropback game, and run game to a different level. 
  • We know all of those moves largely worked, with Mahomes leading the NFL in EPA per dropback, Isiah Pacheco and Jerick McKinnon giving them their most versatile backfield in years, and the Chiefs having arguably their best offensive season since Mahomes won (his first) MVP award back in 2018. 
  • We know the Bengals know all of those things, and that the Chiefs know they know it, and that the Bengals know that the Chiefs know they know it and etc.

player headshot team logo

If Mahomes is healthy, he should be trusted to figure things out. Even in the loss to Cincinnati earlier this season, Mahomes completed 16 of 27 passes for 223 yards (8.2 per attempt) and a touchdown, while also adding a score on the ground. Were it not for a Kelce fumble, we might talk about that game a lot differently. It’s not like Mahomes was completely shut down, after all. Kansas City scored on four of its first six drives, and one of those drives was just running out the clock on the first half with two runs from deep in their own territory. So, on five possessions, they totaled 24 points. Then Kelce fumbled, Cincy scored, Harrison Butker missed a game-tying field goal, and the rest is Cincinnati’s mayor claiming Burrow is Mahomes’ father, or something. (If anything, it should be Anarumo is Mahomes’ father, but I digress.)

In that game, though, the Bengals made Mahomes be incredibly patient. He took an average of 3.36 seconds before passing the ball, the seventh-longest time to throw of his 91 career games. (Two of the six games where he took longer were the AFC title game loss to Cincinnati last year, and the Super Bowl loss to the Buccaneers the year before.) Part of the reason he was able to find success anyway was that he could maneuver in the pocket with his mobility, and he used that mobility to create big plays down the field. The quick game stuff the Chiefs tried to add back into their offense this season was largely not available. 

Whether it’s available this week will depend on whether Anarumo decides that Mahomes’ injury means he should send pressure and make him try to move around, or that he should not send pressure because Mahomes can’t move around. If Cincy sends pressure, Mahomes can carve the defense up from the pocket, like he did last week against the Jaguars. The Bengals have very rarely blitzed in these last two games against the Chiefs, though, and they’re not a heavy blitz team anyway. It seems unlikely that Anarumo suddenly reverses course on that. But if the Bengals don’t send extra bodies, it’s also likely that the wall the Chiefs have built in front of Mahomes over these last two years holds up and allows him time to find the free man down the field. 

I’d expect that Kansas City will be in shotgun more often than not so that Mahomes doesn’t have to move around too much to facilitate the run game or get into the play-action pass concepts, which means it should be a heavier game for McKinnon than Pacheco. McKinnon is an ace pass-protector and has a bit more big-play juice due to his agility, but Pacheco does have the ability to get downhill and punish the Bengals for playing with light boxes. It wouldn’t be surprising to see the Chiefs try to get their run game going early so that the Bengals have to creep up and allow for more downfield throws. 

Chiefs vs. Bengals how to watch: Time, watch 2023 AFC

If you have any question please CONTACT  Us
Email us at:  [email protected]
Call US : (832) 722-8074

Don’t Forget to Visit our Shop 

For reliable and quality Managed IT Services and VoIP, Contact Precise Business Solutions 

Ranking 10 Unforgettable Items From the 2023 PGA Merchandise Show


Ranking 10 Unforgettable Items From the 2023 PGA Merchandise Show – Sports Illustrated Golf: News, Scores, Equipment, Instruction, Travel, Courses ‘);]]>‘);]]>‘);]]>‘);]]>‘);]]>‘);]]>“)}]]>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i0){str=”childof[“+num+”]:”+str}}return str};if(PerformanceObserver.supportedEntryTypes.includes(“layout-shift”)){var transformString=function transformString(previousRect,currentRect){var str=””;if(!previousRect||!currentRect){if(!previousRect)str+=”np”;if(!currentRect)str+=”nc”;return str}if(!previousRect.width||!previousRect.height||!currentRect.width||!currentRect.height){if(!previousRect.width)str+=”npw”;if(!previousRect.height)str+=”nph”;if(!currentRect.width)str+=”ncw”;if(!currentRect.height)str+=”nch”;return str}if(previousRect.width!==currentRect.width){if(previousRect.widthcurrentRect.right){str+=”sl”}}else{if(previousRect.leftcurrentRect.left){str+=”htsl”}}if(previousRect.height!==currentRect.height){if(previousRect.heightcurrentRect.bottom){str+=”su”}}else{if(previousRect.topcurrentRect.top){str+=”vtsu”}}return str};var fmtTransformString=function fmtTransformString(src){var unknownSrc={width:”unknown”,height:”unknown”,left:”unknown”,right:”unknown”,top:”unknown”,bottom:”unknown”};var pr=src.previousRect||unknownSrc;var cr=src.currentRect||unknownSrc;return”width:”.concat(pr.width,”->”).concat(cr.width,”,height:”).concat(pr.height,”->”).concat(cr.height,”,left:”).concat(pr.left,”->”).concat(cr.left,”,right:”).concat(pr.right,”->”).concat(cr.right,”,top:”).concat(pr.top,”->”).concat(cr.top,”,bottom:”).concat(pr.bottom,”->”).concat(cr.bottom)};var getNodeStringAndTransformString=function getNodeStringAndTransformString(nsList,sources,tsSummaryList){var str=””;for(var i=0;imaxDuration){maxDuration=entry.duration;debugLog(entry.startTime,”[INP LONGEST]”+msg)}else{debugLog(entry.startTime,”[INP ALL]”+msg)}}}catch(err){_iterator.e(err)}finally{_iterator.f()}}).observe({type:”event”,durationThreshold:16,buffered:true})}else{debugLog(Date.now()-window.performance.timing.navigationStart,”event is not a supported entry type”)}debugLog(Date.now()-window.performance.timing.navigationStart,”Enabled”)}})();]]>=breakpointHeights[possibleBreakpoint]){breakpoint=possibleBreakpoint}}}return breakpoint}var updateModel=function updateModel(model){var _model$characterCount;model.hasMavenUid=mavenUid?”1″:”0″;model.demonetizedReason=demonetizedReason||”0″;model.correlator=mavenCorrelator;var moreFeatures=phxTrackedFeatures?Object.keys(phxTrackedFeatures).map(function(name){return””.concat(name,”:”).concat(phxTrackedFeatures[name]?”1″:”0″)}).join(“;”):””;model.features=model.features?””.concat(model.features,”;”).concat(moreFeatures):moreFeatures;model.features=model.features.split(“;”).sort().join(“;”);model.breakpoint=getCurrentBreakpoint();model.experiments=experimentString;model.eeaStatus=isApplicable?”1″:”0″;model.characterCount=(_model$characterCount=model.characterCountByBreakpoint)===null||_model$characterCount===void 0?void 0:_model$characterCount[model.breakpoint];var userStatus=window.phxGetLoggedInStatus();if((userStatus===null||userStatus===void 0?void 0:userStatus[“type”])===”rgis”){model.memberId=userStatus[“id”]}if(window.URLSearchParams){var queryParams=new URLSearchParams(window.location.search);if(queryParams.has(“suid”)){model.suid=queryParams.get(“suid”)}if(queryParams.has(“trw”)){model.trwDialogueLink=queryParams.get(“trw”)}}return model};googleAnalyticsConfig.sendPageView=function(_model,_analyticType){var model=updateModel(_model);var analyticsData=[];for(var i=0;i{{/thumbnail}}RELATED STORY{{title}}0){window.getTimedOutPageLoadPromise(30000).then(loadAndStartApp)}})([]);]]>

Ranking 10 Unforgettable Items From the 2023 PGA Merchandise Show

If you have any question please CONTACT  Us
Email us at:  [email protected]
Call US : (832) 722-8074

Don’t Forget to Visit our Shop 

For reliable and quality Managed IT Services and VoIP, Contact Precise Business Solutions 

Just a moment…

Checking if the site connection is secure

Enable JavaScript and cookies to continue

us.shein.com needs to review the security of your connection before proceeding.

Just a moment…

If you have any question please CONTACT  Us
Email us at:  [email protected]
Call US : (832) 722-8074

Don’t Forget to Visit our Shop 

For reliable and quality Managed IT Services and VoIP, Contact Precise Business Solutions 

Custom Handguns

If you’re the type who hates the idea of a stock gun you’ve come to the right place, we offer the most extensive selection of custom pistols for sale in an always expanding inventory. Most popular firearms spawn a massive aftermarket, and our complete custom guns prove just what that aftermarket can do. The first time you shoot or hold a genuinely custom handgun, you’ll realize that some weapons should be pushed passed stock. Custom handguns aren’t something isolated to your standard 1911 pistols and extend to modern polymer handguns too.

At Omaha Outdoors we like to keep a healthy, in-stock selection of custom guns to accommodate our most discerning of customers. Our extensive selection and experienced customer service team will help guide you to the custom pistol you’ve always wanted. Our relationships with custom firearms companies allow us to have some unique firearms for sale. These partnerships have made us a dealer for Agency Arms, Nighthawk Custom, Taran Tactical, ZEV Technologies, and more.

Custom Handguns

If you have any question please CONTACT  Us
Email us at:  [email protected]
Call US : (832) 722-8074

Don’t Forget to Visit our Shop 

For reliable and quality Managed IT Services and VoIP, Contact Precise Business Solutions 


If you have any question please CONTACT  Us
Email us at:  [email protected]
Call US : (832) 722-8074

Don’t Forget to Visit our Shop 

For reliable and quality Managed IT Services and VoIP, Contact Precise Business Solutions 


If you have any question please CONTACT  Us
Email us at:  [email protected]
Call US : (832) 722-8074

Don’t Forget to Visit our Shop 

For reliable and quality Managed IT Services and VoIP, Contact Precise Business Solutions 

Athletic Department

Knox County Schools is committed to providing a website that is accessible to the widest possible audience, regardless of technology or ability. This website endeavors to comply with best practices and standards as defined by Section 508 of the U. S. Rehabilitation Act. If you would like additional assistance or have accessibility concerns, please contact our Central Office at (865) 594-1800 or complete our Questions and Feedback Form.

We are continually striving to improve the accessibility standards of our website. Accessibility Contact

Athletic Department

If you have any question please CONTACT  Us
Email us at:  [email protected]
Call US : (832) 722-8074

Don’t Forget to Visit our Shop 

For reliable and quality Managed IT Services and VoIP, Contact Precise Business Solutions 


If you have any question please CONTACT  Us
Email us at:  [email protected]
Call US : (832) 722-8074

Don’t Forget to Visit our Shop 

For reliable and quality Managed IT Services and VoIP, Contact Precise Business Solutions 

Customs Brokerage Services

Your Browser is Not Currently Supported

We recommend using one of the following browsers for an optimal website experience. For more information, visit Data Security Page

    APPLE BROWSERS

  • Google Chrome 41+
  • Mozilla Firefox 38+
  • Safari 7++

    ANDROID BROWSERS

  • Chrome 41+
  • Firefox 38+

Do not show this message again

Customs Brokerage Services

If you have any question please CONTACT  Us
Email us at:  [email protected]
Call US : (832) 722-8074

Don’t Forget to Visit our Shop 

For reliable and quality Managed IT Services and VoIP, Contact Precise Business Solutions