[{"data":1,"prerenderedAt":1032},["ShallowReactive",2],{"post:\u002F2021\u002F02\u002F18\u002Fpowershell-get-exchange-mailboxes-over-xxgb\u002F":3},{"post":4,"newer":983,"older":992,"related":1002,"series":1030},{"id":5,"title":6,"body":7,"canonical":962,"categories":963,"date":966,"description":13,"extension":967,"featured":968,"hero":969,"image":969,"meta":970,"navigation":760,"path":971,"readingTime":129,"seo":972,"series":969,"seriesOrder":969,"sites":973,"source":975,"stem":976,"tags":977,"updated":980,"url":981,"__hash__":982},"blog\u002Fblog\u002F2021\u002F02\u002F18\u002Fpowershell-get-exchange-mailboxes-over-xxgb.md","PowerShell: Get Exchange Mailboxes Over XXGB",{"type":8,"value":9,"toc":948},"minimark",[10,14,19,42,46,49,100,104,107,111,116,141,145,155,195,198,207,219,223,226,325,328,339,362,369,384,391,437,440,452,455,474,480,499,502,519,526,529,535,563,567,574,591,595,598,607,610,618,627,651,655,658,944],[11,12,13],"p",{},"Simple command turned crazy. I ended up coming up with this due to the fact we have duplicate display names and needed to update for Exchange Online to get mailbox sizes.",[15,16,18],"h2",{"id":17},"requirements","Requirements",[20,21,22,31],"ul",{},[23,24,25,26,30],"li",{},"An Exchange Online PowerShell session, for example from the ExchangeOnlineManagement module with ",[27,28,29],"code",{},"Connect-ExchangeOnline",".",[23,32,33,34,37,38,41],{},"Permission to run ",[27,35,36],{},"Get-Mailbox"," and ",[27,39,40],{},"Get-MailboxStatistics"," against every mailbox you want to check.",[15,43,45],{"id":44},"parameters","Parameters",[11,47,48],{},"The command has no parameters. The one value you change is the size threshold.",[50,51,52,71],"table",{},[53,54,55],"thead",{},[56,57,58,62,65,68],"tr",{},[59,60,61],"th",{},"Name",[59,63,64],{},"Type",[59,66,67],{},"Required",[59,69,70],{},"Description",[72,73,74],"tbody",{},[56,75,76,87,90,93],{},[77,78,79,82,83,86],"td",{},[27,80,81],{},"45"," (in ",[27,84,85],{},"-gt 45",")",[77,88,89],{},"number (GB)",[77,91,92],{},"Yes",[77,94,95,96,99],{},"Mailboxes larger than this many GB are listed. Edit it in the ",[27,97,98],{},"Where-Object"," stage of the command.",[15,101,103],{"id":102},"walkthrough","Walkthrough",[11,105,106],{},"Here is a breakdown of the code, one stage of the pipeline at a time.",[108,109,36],"h3",{"id":110},"get-mailbox",[11,112,113,115],{},[27,114,36],{}," gets all the mailboxes available, there’s no search filter on this one.",[117,118,123],"pre",{"className":119,"code":120,"language":121,"meta":122,"style":122},"language-powershell shiki shiki-themes github-dark","Get-Mailbox -ResultSize Unlimited\n","powershell","",[27,124,125],{"__ignoreMap":122},[126,127,130,133,137],"span",{"class":128,"line":129},"line",1,[126,131,36],{"class":132},"sDLfK",[126,134,136],{"class":135},"snl16"," -",[126,138,140],{"class":139},"s95oV","ResultSize Unlimited\n",[108,142,144],{"id":143},"select-object-for-identity","Select-Object for Identity",[11,146,147,148,151,152,154],{},"The ",[27,149,150],{},"Select-Object"," statement is used for doing a select expression where we can transform the Identity parameter that is being used as pipeline input for the ",[27,153,40],{},". I did this mainly because we have duplicate display names and differing email addresses in this specific tenant.",[117,156,158],{"className":119,"code":157,"language":121,"meta":122,"style":122},"| Select-Object @{ Name = 'Identity'; Expression = { $_.PrimarySmtpAddress } }\n",[27,159,160],{"__ignoreMap":122},[126,161,162,165,168,171,174,177,181,184,186,189,192],{"class":128,"line":129},[126,163,164],{"class":135},"|",[126,166,167],{"class":132}," Select-Object",[126,169,170],{"class":135}," @",[126,172,173],{"class":139},"{ Name ",[126,175,176],{"class":135},"=",[126,178,180],{"class":179},"sU2Wk"," 'Identity'",[126,182,183],{"class":139},"; Expression ",[126,185,176],{"class":135},[126,187,188],{"class":139}," { ",[126,190,191],{"class":132},"$_",[126,193,194],{"class":139},".PrimarySmtpAddress } }\n",[108,196,40],{"id":197},"get-mailboxstatistics",[11,199,200,202,203,206],{},[27,201,40],{}," accept pipeline input of the default variable Identity. By doing the select statement above, we’re now using ",[27,204,205],{},"-Identity"," via the pipeline using the primary SMTP email address. This command outputs the data about a mailbox.",[117,208,210],{"className":119,"code":209,"language":121,"meta":122,"style":122},"| Get-MailboxStatistics\n",[27,211,212],{"__ignoreMap":122},[126,213,214,216],{"class":128,"line":129},[126,215,164],{"class":135},[126,217,218],{"class":132}," Get-MailboxStatistics\n",[108,220,222],{"id":221},"select-object-for-totalitemsize","Select-Object for TotalItemSize",[11,224,225],{},"This next select statement gives us the TotalItemSize formatted for use with comparison.",[117,227,229],{"className":119,"code":228,"language":121,"meta":122,"style":122},"| Select-Object DisplayName, @{ Name = \"TotalItemSize\"; Expression = { [math]::Round($($_.TotalItemSize.Value.ToString().Replace(\",\", \"\").Split(\"(\")[1].Split(\" bytes\")[0]) \u002F 1GB, 2) } }\n",[27,230,231],{"__ignoreMap":122},[126,232,233,235,237,240,243,245,247,249,252,254,256,259,262,265,268,271,273,276,279,281,284,287,290,293,296,299,302,304,307,310,313,316,319,322],{"class":128,"line":129},[126,234,164],{"class":135},[126,236,167],{"class":132},[126,238,239],{"class":139}," DisplayName",[126,241,242],{"class":135},",",[126,244,170],{"class":135},[126,246,173],{"class":139},[126,248,176],{"class":135},[126,250,251],{"class":179}," \"TotalItemSize\"",[126,253,183],{"class":139},[126,255,176],{"class":135},[126,257,258],{"class":139}," { [",[126,260,261],{"class":135},"math",[126,263,264],{"class":139},"]::Round(",[126,266,267],{"class":135},"$",[126,269,270],{"class":139},"(",[126,272,191],{"class":132},[126,274,275],{"class":139},".TotalItemSize.Value.ToString().Replace(",[126,277,278],{"class":179},"\",\"",[126,280,242],{"class":135},[126,282,283],{"class":179}," \"\"",[126,285,286],{"class":139},").Split(",[126,288,289],{"class":179},"\"(\"",[126,291,292],{"class":139},")[",[126,294,295],{"class":132},"1",[126,297,298],{"class":139},"].Split(",[126,300,301],{"class":179},"\" bytes\"",[126,303,292],{"class":139},[126,305,306],{"class":132},"0",[126,308,309],{"class":139},"]) ",[126,311,312],{"class":135},"\u002F",[126,314,315],{"class":132}," 1",[126,317,318],{"class":135},"GB,",[126,320,321],{"class":132}," 2",[126,323,324],{"class":139},") } }\n",[11,326,327],{},"This part of the select statement is broken down as follows:",[11,329,330,331,334,335,338],{},"The first part is the beginning of a select expression, the ",[27,332,333],{},"{"," after ",[27,336,337],{},"Expression ="," is the start of the expression that will now become TotalItemSize.",[117,340,342],{"className":119,"code":341,"language":121,"meta":122,"style":122},"@{ Name = \"TotalItemSize\"; Expression = {} }\n",[27,343,344],{"__ignoreMap":122},[126,345,346,349,351,353,355,357,359],{"class":128,"line":129},[126,347,348],{"class":135},"@",[126,350,173],{"class":139},[126,352,176],{"class":135},[126,354,251],{"class":179},[126,356,183],{"class":139},[126,358,176],{"class":135},[126,360,361],{"class":139}," {} }\n",[11,363,364,365,368],{},"Next up, we have the ",[27,366,367],{},"[math]"," function, we use this because by doing the simple math, we’d have a large amount of decimal places, so we round it.",[117,370,372],{"className":119,"code":371,"language":121,"meta":122,"style":122},"[math]::Round()\n",[27,373,374],{"__ignoreMap":122},[126,375,376,379,381],{"class":128,"line":129},[126,377,378],{"class":139},"[",[126,380,261],{"class":135},[126,382,383],{"class":139},"]::Round()\n",[11,385,386,387,390],{},"Inside the ",[27,388,389],{},"()"," for the Round, we have this expression",[117,392,394],{"className":119,"code":393,"language":121,"meta":122,"style":122},"$($_.TotalItemSize.Value.ToString().Replace(\",\", \"\").Split(\"(\")[1].Split(\" bytes\")[0]) \u002F 1GB\n",[27,395,396],{"__ignoreMap":122},[126,397,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434],{"class":128,"line":129},[126,399,267],{"class":135},[126,401,270],{"class":139},[126,403,191],{"class":132},[126,405,275],{"class":139},[126,407,278],{"class":179},[126,409,242],{"class":135},[126,411,283],{"class":179},[126,413,286],{"class":139},[126,415,289],{"class":179},[126,417,292],{"class":139},[126,419,295],{"class":132},[126,421,298],{"class":139},[126,423,301],{"class":179},[126,425,292],{"class":139},[126,427,306],{"class":132},[126,429,309],{"class":139},[126,431,312],{"class":135},[126,433,315],{"class":132},[126,435,436],{"class":135},"GB\n",[11,438,439],{},"The TotalItemSize is modified to become a string",[117,441,443],{"className":119,"code":442,"language":121,"meta":122,"style":122},"$_.TotalItemSize.Value.ToString()\n",[27,444,445],{"__ignoreMap":122},[126,446,447,449],{"class":128,"line":129},[126,448,191],{"class":132},[126,450,451],{"class":139},".TotalItemSize.Value.ToString()\n",[11,453,454],{},"then we replace the commas in the string",[117,456,458],{"className":119,"code":457,"language":121,"meta":122,"style":122},".Replace(\",\", \"\")\n",[27,459,460],{"__ignoreMap":122},[126,461,462,465,467,469,471],{"class":128,"line":129},[126,463,464],{"class":139},".Replace(",[126,466,278],{"class":179},[126,468,242],{"class":135},[126,470,283],{"class":179},[126,472,473],{"class":139},")\n",[11,475,476,477,479],{},"split it at the first ",[27,478,270],{}," and grab the second part of the array",[117,481,483],{"className":119,"code":482,"language":121,"meta":122,"style":122},".Split(\"(\")[1]\n",[27,484,485],{"__ignoreMap":122},[126,486,487,490,492,494,496],{"class":128,"line":129},[126,488,489],{"class":139},".Split(",[126,491,289],{"class":179},[126,493,292],{"class":139},[126,495,295],{"class":132},[126,497,498],{"class":139},"]\n",[11,500,501],{},"then split again at bytes and grab the first part of that array",[117,503,505],{"className":119,"code":504,"language":121,"meta":122,"style":122},".Split(\" bytes\")[0]\n",[27,506,507],{"__ignoreMap":122},[126,508,509,511,513,515,517],{"class":128,"line":129},[126,510,489],{"class":139},[126,512,301],{"class":179},[126,514,292],{"class":139},[126,516,306],{"class":132},[126,518,498],{"class":139},[11,520,521,522,525],{},"Finally we finish the Round() statement with a ",[27,523,524],{},",2"," which gives us 2 decimal places rounded.",[108,527,98],{"id":528},"where-object",[11,530,531,532,534],{},"The next pipeline sets the ",[27,533,98],{}," and we’re only concerned about mailboxes over 45 GB in this example. You can change this to whatever you’d like to filter based on.",[117,536,538],{"className":119,"code":537,"language":121,"meta":122,"style":122},"| Where-Object { $_.TotalItemSize -gt 45 }\n",[27,539,540],{"__ignoreMap":122},[126,541,542,544,547,549,551,554,557,560],{"class":128,"line":129},[126,543,164],{"class":135},[126,545,546],{"class":132}," Where-Object",[126,548,188],{"class":139},[126,550,191],{"class":132},[126,552,553],{"class":139},".TotalItemSize ",[126,555,556],{"class":135},"-gt",[126,558,559],{"class":132}," 45",[126,561,562],{"class":139}," }\n",[108,564,566],{"id":565},"format-table","Format-Table",[11,568,569,570,573],{},"The last stage, ",[27,571,572],{},"Format-Table -AutoSize",", prints the result as a table sized to fit its content.",[117,575,577],{"className":119,"code":576,"language":121,"meta":122,"style":122},"| Format-Table -AutoSize\n",[27,578,579],{"__ignoreMap":122},[126,580,581,583,586,588],{"class":128,"line":129},[126,582,164],{"class":135},[126,584,585],{"class":132}," Format-Table",[126,587,136],{"class":135},[126,589,590],{"class":139},"AutoSize\n",[15,592,594],{"id":593},"usage","Usage",[11,596,597],{},"Connect to Exchange Online, then run the command from the Script section below.",[117,599,601],{"className":119,"code":600,"language":121,"meta":122,"style":122},"Connect-ExchangeOnline\n",[27,602,603],{"__ignoreMap":122},[126,604,605],{"class":128,"line":129},[126,606,600],{"class":132},[11,608,609],{},"It prints each mailbox over the threshold with its display name and size in GB.",[117,611,616],{"className":612,"code":614,"language":615,"meta":122},[613],"language-text","DisplayName    TotalItemSize\n-----------    -------------\n\u003Cdisplay-name>         52.31\n","text",[27,617,614],{"__ignoreMap":122},[11,619,620,621,623,624,626],{},"To list mailboxes over 100 GB instead, change the ",[27,622,81],{}," in the ",[27,625,98],{}," stage.",[117,628,630],{"className":119,"code":629,"language":121,"meta":122,"style":122},"| Where-Object { $_.TotalItemSize -gt 100 }\n",[27,631,632],{"__ignoreMap":122},[126,633,634,636,638,640,642,644,646,649],{"class":128,"line":129},[126,635,164],{"class":135},[126,637,546],{"class":132},[126,639,188],{"class":139},[126,641,191],{"class":132},[126,643,553],{"class":139},[126,645,556],{"class":135},[126,647,648],{"class":132}," 100",[126,650,562],{"class":139},[15,652,654],{"id":653},"script","Script",[11,656,657],{},"The full command, expanded across lines. Each line ends with a pipe so it can be pasted straight into an Exchange Online session.",[117,659,661],{"className":119,"code":660,"language":121,"meta":122,"style":122},"\u003C#\n.SYNOPSIS\n    Lists Exchange Online mailboxes larger than a size threshold.\n.DESCRIPTION\n    Gets all mailboxes, passes each primary SMTP address to Get-MailboxStatistics (so\n    duplicate display names do not matter), converts TotalItemSize to GB and keeps the\n    mailboxes over 45 GB.\n.EXAMPLE\n    .\\Get-MailboxOverSize.ps1\n.NOTES\n    Author  : Thomas Lasswell (https:\u002F\u002Fwww.techcolumnist.com)\n    Version : 1.0 (2021-02-18)\n    Requires: Exchange Online PowerShell session; permission to run Get-Mailbox and Get-MailboxStatistics\n#>\n\nGet-Mailbox -ResultSize Unlimited |\n    Select-Object @{ Name = 'Identity'; Expression = { $_.PrimarySmtpAddress } } |\n    Get-MailboxStatistics |\n    Select-Object DisplayName, @{\n        Name       = \"TotalItemSize\"\n        Expression = {\n            [math]::Round($($_.TotalItemSize.Value.ToString().Replace(\",\", \"\").Split(\"(\")[1].Split(\" bytes\")[0]) \u002F 1GB, 2)\n        }\n    } |\n    Where-Object { $_.TotalItemSize -gt 45 } |\n    Format-Table -AutoSize\n",[27,662,663,669,677,683,691,697,703,709,717,723,731,737,743,749,755,762,775,802,811,825,836,847,899,905,913,934],{"__ignoreMap":122},[126,664,665],{"class":128,"line":129},[126,666,668],{"class":667},"sAwPA","\u003C#\n",[126,670,672,674],{"class":128,"line":671},2,[126,673,30],{"class":132},[126,675,676],{"class":135},"SYNOPSIS\n",[126,678,680],{"class":128,"line":679},3,[126,681,682],{"class":667},"    Lists Exchange Online mailboxes larger than a size threshold.\n",[126,684,686,688],{"class":128,"line":685},4,[126,687,30],{"class":132},[126,689,690],{"class":135},"DESCRIPTION\n",[126,692,694],{"class":128,"line":693},5,[126,695,696],{"class":667},"    Gets all mailboxes, passes each primary SMTP address to Get-MailboxStatistics (so\n",[126,698,700],{"class":128,"line":699},6,[126,701,702],{"class":667},"    duplicate display names do not matter), converts TotalItemSize to GB and keeps the\n",[126,704,706],{"class":128,"line":705},7,[126,707,708],{"class":667},"    mailboxes over 45 GB.\n",[126,710,712,714],{"class":128,"line":711},8,[126,713,30],{"class":132},[126,715,716],{"class":135},"EXAMPLE\n",[126,718,720],{"class":128,"line":719},9,[126,721,722],{"class":667},"    .\\Get-MailboxOverSize.ps1\n",[126,724,726,728],{"class":128,"line":725},10,[126,727,30],{"class":132},[126,729,730],{"class":135},"NOTES\n",[126,732,734],{"class":128,"line":733},11,[126,735,736],{"class":667},"    Author  : Thomas Lasswell (https:\u002F\u002Fwww.techcolumnist.com)\n",[126,738,740],{"class":128,"line":739},12,[126,741,742],{"class":667},"    Version : 1.0 (2021-02-18)\n",[126,744,746],{"class":128,"line":745},13,[126,747,748],{"class":667},"    Requires: Exchange Online PowerShell session; permission to run Get-Mailbox and Get-MailboxStatistics\n",[126,750,752],{"class":128,"line":751},14,[126,753,754],{"class":667},"#>\n",[126,756,758],{"class":128,"line":757},15,[126,759,761],{"emptyLinePlaceholder":760},true,"\n",[126,763,765,767,769,772],{"class":128,"line":764},16,[126,766,36],{"class":132},[126,768,136],{"class":135},[126,770,771],{"class":139},"ResultSize Unlimited ",[126,773,774],{"class":135},"|\n",[126,776,778,781,783,785,787,789,791,793,795,797,800],{"class":128,"line":777},17,[126,779,780],{"class":132},"    Select-Object",[126,782,170],{"class":135},[126,784,173],{"class":139},[126,786,176],{"class":135},[126,788,180],{"class":179},[126,790,183],{"class":139},[126,792,176],{"class":135},[126,794,188],{"class":139},[126,796,191],{"class":132},[126,798,799],{"class":139},".PrimarySmtpAddress } } ",[126,801,774],{"class":135},[126,803,805,808],{"class":128,"line":804},18,[126,806,807],{"class":132},"    Get-MailboxStatistics",[126,809,810],{"class":135}," |\n",[126,812,814,816,818,820,822],{"class":128,"line":813},19,[126,815,780],{"class":132},[126,817,239],{"class":139},[126,819,242],{"class":135},[126,821,170],{"class":135},[126,823,824],{"class":139},"{\n",[126,826,828,831,833],{"class":128,"line":827},20,[126,829,830],{"class":139},"        Name       ",[126,832,176],{"class":135},[126,834,835],{"class":179}," \"TotalItemSize\"\n",[126,837,839,842,844],{"class":128,"line":838},21,[126,840,841],{"class":139},"        Expression ",[126,843,176],{"class":135},[126,845,846],{"class":139}," {\n",[126,848,850,853,855,857,859,861,863,865,867,869,871,873,875,877,879,881,883,885,887,889,891,893,895,897],{"class":128,"line":849},22,[126,851,852],{"class":139},"            [",[126,854,261],{"class":135},[126,856,264],{"class":139},[126,858,267],{"class":135},[126,860,270],{"class":139},[126,862,191],{"class":132},[126,864,275],{"class":139},[126,866,278],{"class":179},[126,868,242],{"class":135},[126,870,283],{"class":179},[126,872,286],{"class":139},[126,874,289],{"class":179},[126,876,292],{"class":139},[126,878,295],{"class":132},[126,880,298],{"class":139},[126,882,301],{"class":179},[126,884,292],{"class":139},[126,886,306],{"class":132},[126,888,309],{"class":139},[126,890,312],{"class":135},[126,892,315],{"class":132},[126,894,318],{"class":135},[126,896,321],{"class":132},[126,898,473],{"class":139},[126,900,902],{"class":128,"line":901},23,[126,903,904],{"class":139},"        }\n",[126,906,908,911],{"class":128,"line":907},24,[126,909,910],{"class":139},"    } ",[126,912,774],{"class":135},[126,914,916,919,921,923,925,927,929,932],{"class":128,"line":915},25,[126,917,918],{"class":132},"    Where-Object",[126,920,188],{"class":139},[126,922,191],{"class":132},[126,924,553],{"class":139},[126,926,556],{"class":135},[126,928,559],{"class":132},[126,930,931],{"class":139}," } ",[126,933,774],{"class":135},[126,935,937,940,942],{"class":128,"line":936},26,[126,938,939],{"class":132},"    Format-Table",[126,941,136],{"class":135},[126,943,590],{"class":139},[945,946,947],"style",{},"html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":122,"searchDepth":671,"depth":671,"links":949},[950,951,952,960,961],{"id":17,"depth":671,"text":18},{"id":44,"depth":671,"text":45},{"id":102,"depth":671,"text":103,"children":953},[954,955,956,957,958,959],{"id":110,"depth":679,"text":36},{"id":143,"depth":679,"text":144},{"id":197,"depth":679,"text":40},{"id":221,"depth":679,"text":222},{"id":528,"depth":679,"text":98},{"id":565,"depth":679,"text":566},{"id":593,"depth":671,"text":594},{"id":653,"depth":671,"text":654},"techcolumnist",[964,965],"ps","scripts","2021-02-18T14:46:29Z","md",false,null,{},"\u002Fblog\u002F2021\u002F02\u002F18\u002Fpowershell-get-exchange-mailboxes-over-xxgb",{"title":6,"description":13},[974,962],"lasswell","both","blog\u002F2021\u002F02\u002F18\u002Fpowershell-get-exchange-mailboxes-over-xxgb",[121,978,979],"exchange","exchange-online","2026-09-20T00:00:00Z","\u002F2021\u002F02\u002F18\u002Fpowershell-get-exchange-mailboxes-over-xxgb\u002F","-sXgTuHLqxx43HwXxv0ix5Q_dIvcs5RITyqDuFd1L9s",{"title":984,"description":985,"date":986,"url":987,"categories":988,"tags":989,"image":969,"readingTime":129,"canonical":962,"sites":991,"series":969,"seriesOrder":969},"PowerShell: Autotask – Enable Client Portal for All Users","This is a quick one, it’s been forever since I’ve posted here. After moving back to Autotask, there’s still a ton of things to automate.","2022-10-12T14:13:37Z","\u002F2022\u002F10\u002F12\u002Fautotask-powershell-enable-client-portal-for-all-users\u002F",[964,965],[990,121],"autotask",[974,962],{"title":993,"description":994,"date":995,"url":996,"categories":997,"tags":998,"image":1000,"readingTime":671,"canonical":962,"sites":1001,"series":969,"seriesOrder":969},"PowerShell: ConnectWise Documents API, Uploading a Document or Attachment to a Ticket","PowerShell: upload a document or attachment to a ConnectWise ticket through the form-based Documents API.","2019-01-09T09:46:57Z","\u002F2019\u002F01\u002F09\u002Fpowershell-connectwise-documents-api-uploading-a-document-or-attachment-to-a-ticket\u002F",[964,965],[999,121],"connectwise","\u002Fuploads\u002F2019\u002F01\u002Fimage.png",[974,962],[1003,1012,1021],{"title":1004,"description":1005,"date":1006,"url":1007,"categories":1008,"tags":1009,"image":969,"readingTime":693,"canonical":962,"sites":1011,"series":969,"seriesOrder":969},"PowerShell: Exchange Online – Report Mailboxes Approaching Their Quota","Flag Exchange Online mailboxes above a percentage of their ProhibitSendQuota, plus Recoverable Items pressure, using the EXO V3 Get-EXO cmdlets.","2025-09-03T14:00:00Z","\u002F2025\u002F09\u002F03\u002Fpowershell-exchange-online-report-mailboxes-approaching-their-quota\u002F",[964,965],[121,979,1010],"reporting",[962],{"title":1013,"description":1014,"date":1015,"url":1016,"categories":1017,"tags":1018,"image":969,"readingTime":693,"canonical":962,"sites":1020,"series":969,"seriesOrder":969},"PowerShell: Active Directory – Report Group Membership Sprawl","Rank AD security groups by nesting depth, transitive member count, ownership and staleness for an access review, plus a per-user Kerberos token size estimate.","2025-12-03T14:00:00Z","\u002F2025\u002F12\u002F03\u002Fpowershell-active-directory-report-group-membership-sprawl\u002F",[964,965],[121,1019,1010],"active-directory",[962],{"title":1022,"description":1023,"date":1024,"url":1025,"categories":1026,"tags":1027,"image":969,"readingTime":685,"canonical":962,"sites":1029,"series":969,"seriesOrder":969},"PowerShell: Windows Server – Disable SMBv1 Fleet-Wide and Verify","A script that audits SMBv1 access (event 3000), disables the SMBv1 server and optional feature across Windows servers, and reports which ones still need a restart.","2025-11-26T14:00:00Z","\u002F2025\u002F11\u002F26\u002Fpowershell-windows-server-disable-smbv1-fleet-wide-and-verify-it-stuck\u002F",[964,965],[121,1028],"windows",[962],{"doc":969,"posts":1031},[],1790223957608]