{"id":578,"date":"2023-12-17T16:16:56","date_gmt":"2023-12-17T03:16:56","guid":{"rendered":"https:\/\/www.howdoiuseacomputer.com\/?p=578"},"modified":"2023-12-17T16:16:58","modified_gmt":"2023-12-17T03:16:58","slug":"automating-printer-configuration-for-the-modern-workplace","status":"publish","type":"post","link":"https:\/\/www.howdoiuseacomputer.com\/index.php\/2023\/12\/17\/automating-printer-configuration-for-the-modern-workplace\/","title":{"rendered":"Automating printer configuration for the Modern Workplace"},"content":{"rendered":"\n<p><strong>Helloooooo! <\/strong> Wow &#8211; I just realised how long it has been since my last post!  Time flies when you&#8217;re involved in multiple projects and attempting to take on, and hopefully be okay at, a team lead role. &#x1f60e; Like many in IT this year, we have been as busy as, if not slightly busier than the average bunch of beavers, or even bees for that matter!  No complaints here though &#8211; we love our jobs!  &#x1f603;&#x1f601;&#x1f606;  <\/p>\n\n\n\n<p>I am always on the lookout for a wee (or what may turn into a &#8216;not so wee&#8217;) project to challenge my PowerShell skills, and after recent discussions around issues with local printer deployments to Modern Workplace endpoints using Intune, I thought &#8211; that&#8217;s my jam!<\/p>\n\n\n\n<p><strong>Without a print server onsite, <\/strong>it is logical to deploy direct IP connections to printers where possible, or to opt for a cloud print solution.  There are many cloud print options around in 2023; they do potentially add complexity and cost however and may not be required for a small to mid-sized business with relatively basic printing requirements.  They are also another component of the environment that may fail or introduce security concerns etc.<\/p>\n\n\n\n<p><strong>However, cloud-based printing solutions <\/strong>are a must when using swipe cards or reporting on usage.  If you have a lease agreement for your printing, talk to the vendor; most of them have a cloud solution to offer you. As more small and medium-sized businesses shift to cloud-based app and configurations, the solutions will become smarter and more cost effective, I&#8217;m sure.<\/p>\n\n\n\n<p> <strong>Anyway&#8230; to business! <\/strong> The main challenges with automating the creation of local IP printers are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>They can default to color output and\/or printing on one or both sides of the paper.<\/li>\n\n\n\n<li>Some drivers present a security prompt even when installing as &#8216;System&#8217;, preventing silent installation. <\/li>\n\n\n\n<li>They may have advanced properties e.g. stock or label sizes.  With no standards for development these settings could be stored in the registry or a file somewhere in the user profile.  It can be tricky to identify where the settings are kept.<\/li>\n<\/ul>\n\n\n\n<p>Hopefully we can fix the first two of these possibilities with the scripts below <a href=\"https:\/\/github.com\/simonburbery\/PrintInst4Intune\">(which you can contribute to here on GitHub if you like!<\/a>).  And for the last one we&#8217;ll go through some common places to find things with an example using SATO label printers. <\/p>\n\n\n\n<p><strong>Pre-requisite tasks:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Download all the print drivers you need in your deployment and extract them to a folder (let&#8217;s call it the Root or Source Folder).  Also copy the <em>PrintInst4intune.ps1 <\/em>script into this folder.<\/li>\n\n\n\n<li>You will need to know the names of the drivers you are installing, to put into an input file.  You can get the names from within the INF files in the driver folders you downloaded, but more likely from wherever they were installed before under the Advanced tab of the printer properties.  In the INF file you can look for something like below where it might be the &#8220;SATO LC408e&#8221; we need to install.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"570\" height=\"605\" src=\"https:\/\/www.howdoiuseacomputer.com\/wp-content\/uploads\/2023\/11\/image-1.png\" alt=\"\" class=\"wp-image-580\" style=\"aspect-ratio:0.9421487603305785;width:420px;height:auto\" srcset=\"https:\/\/www.howdoiuseacomputer.com\/wp-content\/uploads\/2023\/11\/image-1.png 570w, https:\/\/www.howdoiuseacomputer.com\/wp-content\/uploads\/2023\/11\/image-1-283x300.png 283w\" sizes=\"(max-width: 570px) 100vw, 570px\" \/><\/figure>\n\n\n\n<p>3. Now create an input file in Excel following the example below&#8230;  This must have all the DriverName values 100% correct.  Save this as a TAB delimited file in the root folder.  The script looks for <em><strong>printerdetails.txt<\/strong><\/em> by default. <\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"642\" height=\"154\" src=\"https:\/\/www.howdoiuseacomputer.com\/wp-content\/uploads\/2023\/11\/image-3.png\" alt=\"\" class=\"wp-image-582\" srcset=\"https:\/\/www.howdoiuseacomputer.com\/wp-content\/uploads\/2023\/11\/image-3.png 642w, https:\/\/www.howdoiuseacomputer.com\/wp-content\/uploads\/2023\/11\/image-3-300x72.png 300w\" sizes=\"(max-width: 642px) 100vw, 642px\" \/><\/figure>\n\n\n\n<p>4. Great!  We have all we need &#8211; time to run the script!  I spent a bit of time putting in checks and logging so you should be able to run it multiple times without it erroring out due to things already existing etc.<\/p>\n\n\n\n<p>In a nutshell, here&#8217;s what <strong><em>PrintInst4intune.ps1<\/em> <\/strong>does:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Restarts the spooler service (just to make sure there are no issues that could prevent success).<\/li>\n\n\n\n<li>Searches the root folder to get a list of CER files, then adds them to the Local Machine Trusted Root and Trusted Publisher stores.  There are two reasons a driver may pop up with a security prompt; A) the cert it was signed with is not trusted OR B) the cert it was signed with has expired.  Installing the cert into the Local Machine cert store will fix occurrence A, so we do that first.  If you have scenario B, you will more likely need to contact the vendor for an updated driver.<\/li>\n\n\n\n<li>Searches the root folder to get a list of INF files.<\/li>\n\n\n\n<li>Uses Pnputil.exe to import the drivers into the Windows driver store.<\/li>\n\n\n\n<li>Uses Add-PrinterDriver to install the drivers we need based on our input file.<\/li>\n\n\n\n<li>Uses the info from the input file to create the printer ports. (there are still no usable printers at this point, but you would see the drivers and ports in the Print Management GUI).<\/li>\n<\/ol>\n\n\n\n<p>In most environments you could use this to deploy one package containing all the required drivers and ports for your environment, to all devices, using <strong>Intune device targeting<\/strong> (or similar using any RMM or device management tool).<\/p>\n\n\n\n<p>You now have all drivers and ports available on all workstations.  Keep reading below for the second script to actually deploy the printers to your users.<\/p>\n\n\n\n<p><strong>Here is the device script<\/strong> &#8211; but check <a href=\"https:\/\/github.com\/simonburbery\/PrintInst4Intune\">GitHub<\/a> for the latest revision!  Cheers, Simon. &#x1f44c;&#x1f601;&#x1f44c;<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code># start\n\n# Installs any driver signing certificates (cer) and print drivers (inf) found within a source folder\r\n# Extract all print drivers into the same folder as the script - run in system context.\r\n\r\n# run with Administrative rights, or for Intune deploy in System context to groups of users\r\n\r\n$rootfolder     = \"c:\\temp\\\"                                      # for intune use $rootfolder = \".\\\" \r\n$inputfile      = \"$rootfolder\" + \"PrinterDetails.txt\"       # tab delimited file containing columns 'printername' 'drivername' 'ipaddress' 'port' 'location'\r\n# moved to PrintInst4intune-user.ps1 ==> $colour         = $false         # default to black only, set to $true for colour\r\n# moved to PrintInst4intune-user.ps1 ==> $duplex         = \"Onesided\"     # default to one-sided, can be set to TwoSidedLongEdge or TwoSidedShortEdge\r\n$filterinf      = \"*.inf\"                                         # the files in the root folder structure that enable the import and installation of printer drivers \r\n$filtercer      = \"*.cer\"                                         # the certificate files that may exist in the source structure\r\n$certstoreroot  = \"Cert:\\LocalMachine\\Root\"                       # the local machine root certificate store to which cer files are imported\r\n$certstoretrusted  = \"Cert:\\LocalMachine\\TrustedPublisher\"        # the local machine trusted publisher certificate store to which cer files are imported\r\n$logfile        = \"$rootfolder\" + \"_PrintInst4intune.log\"         # for intune use $logfile = \"$env:TEMP\" + \"\\_printinst4intune.log\"\r\n$warningcount   = 0                                               # any actions that fail increment this counter\r\n\r\n$null = Start-Transcript -Path $logfile\r\n\r\n$x = 300\r\nDo {\r\n    Restart-Service Spooler\r\n    Start-Sleep -Seconds 1\r\n    $x = $x - 1\r\n    if ($x -eq 0) { \r\n        $null = Stop-Transcript\r\n        throw \"Spooler did not restart!\"\r\n    }\r\n} until (Get-Service Spooler | Where-Object { $_.Status -eq \"Running\" })\r\n\r\nif (-not(Test-Path -Path $rootfolder -ErrorAction Ignore)) {\r\n    $null = Stop-Transcript\r\n    throw \"The root folder $rootfolder does not exist!\"\r\n}\r\nif (-not(Test-Path -Path $inputfile -ErrorAction Ignore)) {\r\n    $null = Stop-Transcript\r\n    throw \"The input file $inputfile does not exist!\"\r\n}\r\n\r\n$cerdetail  = Get-ChildItem -Path $rootfolder -Filter $filtercer -File -Recurse\r\n$infdetail  = Get-ChildItem -Path $rootfolder -Filter $filterinf -File -Recurse\r\n\r\nif ($null -eq $cerdetail) {\r\n    Write-Output \"No certificates found in $rootfolder...\"\r\n    Write-Output \"***\"\r\n} else {\r\n    Clear-Host\r\n    Write-Output \"\" \r\n    Write-Output \"Installing certificates found in $rootfolder...\"\r\n    Write-Output \"\" \r\n    \r\n    foreach ($cer in $cerdetail) {\r\n        $cerpath   = $cer.FullName\r\n        Import-Certificate -FilePath $cerpath -CertStoreLocation $certstoreroot\r\n        Import-Certificate -FilePath $cerpath -CertStoreLocation $certstoretrusted\r\n    }    \r\n}\r\n\r\nif ($null -eq $infdetail) {\r\n    $null = Stop-Transcript\r\n    throw \"No INF files found in $rootfolder... exiting.\"\r\n} else {\r\n    Clear-Host\r\n    Write-Output \"\" \r\n    Write-Output \"Importing drivers found in $rootfolder...\"\r\n    Write-Output \"\" \r\n    \r\n    foreach ($inf in $infdetail) {\r\n        $infpath = $inf.FullName\r\n    \r\n    Start-Process \"Pnputil.exe\" -ArgumentList \"\/add-driver $infpath \/install\" -Wait\r\n        if ($? -ne \"True\") {\r\n            Write-Warning \"!!! Failed to import drivers from $infpath\"\r\n            Write-Output \"***\"\r\n            $warningcount = $warningcount + 1\r\n        } else {\r\n            Write-Output \"Successfully imported drivers from $infpath\"\r\n            Write-Output \"***\"\r\n          }\r\n    }    \r\n}    \r\n\r\nClear-Host\r\nWrite-Output \"\"\r\nWrite-Output \"Adding drivers and ports specified in $inputfile...\"\r\nWrite-Output \"\"\r\n\r\n# import input file\r\n$printerdetails = Import-Csv $inputfile -Delimiter \"`t\" \r\n\r\nforeach ($printer in $printerdetails) {\r\n    $printername    = $printer.PrinterName\r\n    $drivername     = $printer.DriverName\r\n    $ipaddress      = $printer.IPAddress\r\n    $port           = $printer.Port\r\n\r\nAdd-PrinterDriver -Name $drivername\r\n    if ($? -ne \"True\") {    \r\n        Write-Warning \"!!! Failed to add $drivername driver for $printername\"\r\n        Write-Output \"***\"\r\n        $warningcount = $warningcount + 1\r\n    } else {\r\n        Write-Output \"Successfully added $drivername driver for $printername\"\r\n        Write-Output \"***\"\r\n      }\r\n\r\nif (-not(Get-PrinterPort -Name \"tcpip_$ipaddress\" -ErrorAction Ignore)) { \r\n    Add-PrinterPort -Name \"tcpip_$ipaddress\" -PrinterHostAddress $ipaddress -PortNumber $port\r\n        if ($? -ne \"True\") {    \r\n            Write-Warning \"!!! Failed to add tcpip_$ipaddress port for $printername\"\r\n            Write-Output \"***\"\r\n            $warningcount = $warningcount + 1\r\n        } else {\r\n            Write-Output \"Successfully added tcpip_$ipaddress port for $printername\"\r\n            Write-Output \"***\"\r\n          }\r\n} else {\r\n    Write-Output \"Port tcpip_$ipaddress exists... skipping\"\r\n    Write-Output \"***\"\r\n  }\r\n}\r\n\r\n$null = Stop-Transcript\r\nClear-Host\r\n\r\nif ($warningcount -eq 0) {\r\n    Write-Output \"***\"\r\n    Write-Output \"No errors occurred - drivers and ports added successfully\"\r\n    Write-Output \"Please Note: this script has NOT added any printers to the user session. Use PrintInst4intune-user.ps1 to deploy printers to users.\"\r\n    Write-Output \"Log file saved to $logfile.\"\r\n    Write-Output \"***\"\r\n} else {\r\n    Write-Output \"***\"\r\n    Write-Output \"There were $warningcount errors - please review $logfile\"\r\n    Write-Output \"***\"\r\n  }\n\n# end\n<\/code><\/pre>\n\n\n\n<p>Okay!  You&#8217;ve deployed all drivers and ports to all workstations.  Now we can use <em>PrintInst4intune-user.ps1<\/em> to deploy the printers to different sets of users as required.<\/p>\n\n\n\n<p>In a nutshell, here&#8217;s what <strong><em>PrintInst4intune-user.ps1<\/em> <\/strong>does:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Uses the input file to add the listed printers to the user session.<\/li>\n\n\n\n<li>Sets default printer properties to grey-scale and one-sided.<\/li>\n\n\n\n<li>Sets the default printer. The script uses an example of using the location value of AKL to set the default, but you have many options here:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You can remove this section if users are okay with selecting their own default.<\/li>\n\n\n\n<li>You could add the name of a specific printer to be set as default (e.g. you can deploy to a site of users that all use the same default.).<\/li>\n\n\n\n<li>You could add a column to iterations of the input file to set a different default printer for different groups of users e.g., add a &#8216;Default&#8217; column and enter &#8216;Yes&#8217; next to the one to set as default, then change the script to the below and deploy to a group containing the users you want to have this as their default printer:  <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># Set default printer\r\n\r\nif ($printer.Default -eq \"Yes\") {\r\n    $defaultprinter = Get-CimInstance -Class Win32_Printer -Filter \"Name='$printername'\"\r\n    Invoke-CimMethod -InputObject $defaultprinter -MethodName SetDefaultPrinter\r\n        if ($? -ne \"True\") {    \r\n            Write-Warning \"!!! Failed to set $printername as default\"\r\n            Write-Output \"***\"\r\n            $warningcount = $warningcount + 1\r\n    } else {\r\n        Write-Output \"Success setting $printername as default\"\r\n        Write-Output \"***\"\r\n      }\r\n}\n<\/code><\/pre>\n\n\n\n<p>Here is the user script &#8211; but please check <a href=\"https:\/\/github.com\/simonburbery\/PrintInst4Intune\">GitHub<\/a> for the latest revision! Cheers, Simon. &#x1f44c;&#x1f601;&#x1f44c;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Add printers, set properties and default printer\n\n$rootfolder     = \"c:\\temp\\\"                                # for intune or other deployment software use $rootfolder = \".\\\"\nSet-Location $rootfolder\n$inputfile      = $rootfolder + \"PrinterDetails.txt\"        # tab delimited file containing columns 'printername' 'drivername' 'ipaddress' 'port' 'location'\n$colour         = $false                                    # $false for greyscale, $true for colour\n$duplex         = \"Onesided\"                                # default to one-sided, can be set to TwoSidedLongEdge or TwoSidedShortEdge\n$logfile        = \"$rootfolder\" + \"_PrintInst4intune.log\"   # for intune use $logfile = \"$env:TEMP\" + \"\\_PrintInst4intune.log\"\n$warningcount   = 0                                         # count of failed commands\n\n$null = Start-Transcript $logfile -Force\n\n$printerdetails = Import-Csv $inputfile -Delimiter \"`t\" \n\nforeach ($printer in $printerdetails) {\n    $printername    = $printer.PrinterName\n    $drivername     = $printer.DriverName\n    $ipaddress      = $printer.IPAddress\n\n    $location       = $printer.location\n\nif (-not(Get-Printer -Name $printername -ErrorAction Ignore)) {\n    Add-Printer -Name $printername -DriverName $drivername -PortName \"tcpip_$ipaddress\" -Comment \"$ipaddress - $drivername\" -Location $location\n        if ($? -ne \"True\") {    \n            Write-Warning \"Failed to add $printername\"\n            Write-Output \"***\"\n            $warningcount = $warningcount + 1\n        } else {\n            Write-Output \"Success adding $printername\"\n            Write-Output \"***\"\n          }\n} else {\n    Write-Output \"Printer $printername exists... skipping\"\n    Write-Output \"***\"\n  }\n\nSet-PrintConfiguration -PrinterName $printername -Color $colour -DuplexingMode $duplex\n    if ($? -ne \"True\") {    \n        Write-Warning \"!!! Failed to set properties for $printername\"\n        Write-Output \"***\"\n        $warningcount = $warningcount + 1\n    } else {\n        Write-Output \"Success setting properties for $printername\"\n        Write-Output \"***\"\n      }\n    }\n# Set default printer\n\n# if deploying with groups, you may have two queues for the printer \n# i.e. one to add the printer and another to add the printer and make it default. \n# In this situation we can set the default printer using only the Class and Invoke-CimMethod lines without an if statement.\n# or we could use an if statement using the name or location or another column from the input file. e.g. HR,Sales,Accounts or AKL,WLG,CHC or Default with Yes value for the desired printer. \n# Add column(s) and data to the input file to cater for your scenario.\nif ($printername -eq \"AKL-Default\") {\n    $defaultprinter = Get-CimInstance -Class Win32_Printer -Filter \"Name='$printername'\"\n    Invoke-CimMethod -InputObject $defaultprinter -MethodName SetDefaultPrinter\n        if ($? -ne \"True\") {    \n            Write-Warning \"!!! Failed to set $printername as default\"\n            Write-Output \"***\"\n            $warningcount = $warningcount + 1\n    } else {\n        Write-Output \"Success setting $printername as default\"\n        Write-Output \"***\"\n      }\n}\n# }\n\n$null = Stop-Transcript\nClear-Host\n\nif ($warningcount -eq 0) {\n    Write-Output \"\"\n    Write-Output \"No errors occurred - printers added successfully\"\n    Write-Output \"Log file saved to $logfile.\" \n} else {\n    Write-Output \"\"\n    Write-Output \"There were $warningcount errors - please review $logfile\"\n  }\n\n# end<\/code><\/pre>\n\n\n\n<p>As usual thanks for reading and I hope to see you again soon! &#x1f61c;&#x1f61c;&#x1f61c; <\/p>\n<div class=\"pvc_clear\"><\/div><p id=\"pvc_stats_578\" class=\"pvc_stats all  \" data-element-id=\"578\" style=\"\"><i class=\"pvc-stats-icon small\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.0\" viewBox=\"0 0 502 315\" preserveAspectRatio=\"xMidYMid meet\"><g transform=\"translate(0,332) scale(0.1,-0.1)\" fill=\"\" stroke=\"none\"><path d=\"M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z\"\/><path d=\"M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z\"\/><path d=\"M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z\"\/><path d=\"M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z\"\/><path d=\"M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z\"\/><path d=\"M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z\"\/><path d=\"M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z\"\/><path d=\"M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z\"\/><path d=\"M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z\"\/><\/g><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/www.howdoiuseacomputer.com\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p><div class=\"pvc_clear\"><\/div>","protected":false},"excerpt":{"rendered":"<p>Helloooooo! Wow &#8211; I just realised how long it has been since my last post! Time flies when you&#8217;re involved in multiple projects and attempting to take on, and hopefully be okay at, a team lead role. &#x1f60e; Like many in IT this year, we have been as busy as, if not slightly busier than [&hellip;]<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_578\" class=\"pvc_stats all  \" data-element-id=\"578\" style=\"\"><i class=\"pvc-stats-icon small\" aria-hidden=\"true\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.0\" viewBox=\"0 0 502 315\" preserveAspectRatio=\"xMidYMid meet\"><g transform=\"translate(0,332) scale(0.1,-0.1)\" fill=\"\" stroke=\"none\"><path d=\"M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z\"\/><path d=\"M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z\"\/><path d=\"M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z\"\/><path d=\"M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z\"\/><path d=\"M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z\"\/><path d=\"M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z\"\/><path d=\"M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z\"\/><path d=\"M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z\"\/><path d=\"M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z\"\/><\/g><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/www.howdoiuseacomputer.com\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[8,9],"tags":[148,143,147,5,145,149,150,146,144],"class_list":["post-578","post","type-post","status-publish","format-standard","hentry","category-powershell","category-ramblings","tag-default-printer","tag-modern","tag-modern-workplace","tag-powershell","tag-print","tag-printer-certificate","tag-printer-install","tag-printing","tag-workplace"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.howdoiuseacomputer.com\/index.php\/wp-json\/wp\/v2\/posts\/578"}],"collection":[{"href":"https:\/\/www.howdoiuseacomputer.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.howdoiuseacomputer.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.howdoiuseacomputer.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.howdoiuseacomputer.com\/index.php\/wp-json\/wp\/v2\/comments?post=578"}],"version-history":[{"count":9,"href":"https:\/\/www.howdoiuseacomputer.com\/index.php\/wp-json\/wp\/v2\/posts\/578\/revisions"}],"predecessor-version":[{"id":591,"href":"https:\/\/www.howdoiuseacomputer.com\/index.php\/wp-json\/wp\/v2\/posts\/578\/revisions\/591"}],"wp:attachment":[{"href":"https:\/\/www.howdoiuseacomputer.com\/index.php\/wp-json\/wp\/v2\/media?parent=578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.howdoiuseacomputer.com\/index.php\/wp-json\/wp\/v2\/categories?post=578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.howdoiuseacomputer.com\/index.php\/wp-json\/wp\/v2\/tags?post=578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}