{"id":8445,"date":"2015-01-03T13:01:13","date_gmt":"2015-01-03T13:01:13","guid":{"rendered":"https:\/\/myworldofit.net\/?p=8445"},"modified":"2015-01-03T16:45:20","modified_gmt":"2015-01-03T16:45:20","slug":"fun-with-sql-server-integration-services-ssis","status":"publish","type":"post","link":"https:\/\/myworldofit.net\/?p=8445","title":{"rendered":"Fun with SQL Server Integration Services (SSIS)"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-8450\" src=\"https:\/\/myworldofit.net\/wp-content\/uploads\/2015\/01\/sqlserver.jpg\" alt=\"\" width=\"300\" height=\"244\" \/>Microsoft SQL Server Integration Services (SSIS) is a powerful tool that comes with any of the paid editions of SQL server. By design its main function is to extract, transform and load data into databases however by mixing in CSV exports and PowerShell commands it can help automate various workflows.<\/p>\n<p>Although I won&#8217;t delve into too much detail in this post I&#8217;ll take a look at what is possible in particular-<\/p>\n<ul>\n<li>Automating the generation of a new staff or student user account<\/li>\n<li>Alerting the service desk when a student or staff member leaves the school<\/li>\n<li>Importing new staff members into the asset management system (to assign school resources to them)<\/li>\n<li>Emailing a report on printing activity to the finance department<\/li>\n<li>Generating email distribution lists automatically<\/li>\n<\/ul>\n<p>In the majority of businesses (and in all schools) there will be some kind of central database which stores information on employees\/staff and in schools students. Where I work this is Capita SIMS, the database its self comprises of a great number of tables however its possible to avoid rooting through the tables to find the data you want by using the commandreporter.exe application.<!--more--><\/p>\n<h4>Automating the generation of new staff or student user accounts<\/h4>\n<p>The basic workflow for the generation of new staff or student accounts is-<\/p>\n<ol>\n<li>Every 30 minutes a SSIS package kicks off that runs a report on any staff members or students who are marked as having a starting date in the future, the report contains the PersonID (a unique ID number) along with the Forename and Surname of any new starter.<\/li>\n<li>From the report things like the username, path to personal documents, default password\u00a0and which mailbox database the user should be attached to are generated, next this information is compared with a SQL database of known current users to see if the user has already been imported or if the user is new (using the Slowly Changing Dimension transform). In addition there is logic built in to detect if a duplicate username has been generated and if so then this is emailed to the ICT Service Desk for manual resolution.<\/li>\n<li>With the details of the user now in a SQL database a CSV is generated for a PowerShell script which provisions the users AD account, a further CSV is generated which also provisions the users home folder on the file server.<\/li>\n<li>Next up another CSV is generated which contains the details required to provision the users Exchange email account, this is passed through a remote PowerShell session and the account generated.<\/li>\n<li>Finally the user is marked as &#8216;exported&#8217; to prevent their account from being duplicated and an email is sent to the ICT Service Desk containing the users username and password along with a link to any manual tasks that should be carried out.<\/li>\n<\/ol>\n<p>This SSIS package has been running very well for the past year (which included the generation of ~115 accounts at the same time for the summer Year 7 intake) with only a modification to allow for students with names longer than 100 characters long (yes that one took me by surprise!).<\/p>\n<p><!-- default-view.php -->\n<div\n\tclass=\"ngg-galleryoverview default-view\n\t ngg-ajax-pagination-none\t\"\n\tid=\"ngg-gallery-3e22e4eea6f654a0c3170256d21c0160-1\"\n\tdata-gallery-id=\"97\">\n\n\t\t<!-- Thumbnails -->\n\t\t\t\t<div id=\"ngg-image-0\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/1.PNG\"\n\t\t\t\ttitle=\"Quite the SSIS package but it all works :) note the functions that determine if the script should continue or not (if there is no information to import).\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/1.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/thumbs\/thumbs_1.PNG\"\n\t\t\t\tdata-image-id=\"805\"\n\t\t\t\tdata-title=\"1\"\n\t\t\t\tdata-description=\"Quite the SSIS package but it all works :) note the functions that determine if the script should continue or not (if there is no information to import).\"\n\t\t\t\tdata-image-slug=\"1-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"3e22e4eea6f654a0c3170256d21c0160\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"1\"\n\t\t\t\t\talt=\"1\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/thumbs\/thumbs_1.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-1\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/3.PNG\"\n\t\t\t\ttitle=\"This is where the new users start, if there are any duplicate imports they get detected at this stage, counted and sent off to a CSV for manual intervention.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/3.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/thumbs\/thumbs_3.PNG\"\n\t\t\t\tdata-image-id=\"806\"\n\t\t\t\tdata-title=\"3\"\n\t\t\t\tdata-description=\"This is where the new users start, if there are any duplicate imports they get detected at this stage, counted and sent off to a CSV for manual intervention.\"\n\t\t\t\tdata-image-slug=\"3-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"3e22e4eea6f654a0c3170256d21c0160\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"3\"\n\t\t\t\t\talt=\"3\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/thumbs\/thumbs_3.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-2\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/4.PNG\"\n\t\t\t\ttitle=\"This component determines what the users details will be (UPN\/password and such).\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/4.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/thumbs\/thumbs_4.PNG\"\n\t\t\t\tdata-image-id=\"807\"\n\t\t\t\tdata-title=\"4\"\n\t\t\t\tdata-description=\"This component determines what the users details will be (UPN\/password and such).\"\n\t\t\t\tdata-image-slug=\"4-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"3e22e4eea6f654a0c3170256d21c0160\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"4\"\n\t\t\t\t\talt=\"4\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/thumbs\/thumbs_4.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-3\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/5.PNG\"\n\t\t\t\ttitle=\"The PowerShell script that does the import.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/5.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/thumbs\/thumbs_5.PNG\"\n\t\t\t\tdata-image-id=\"808\"\n\t\t\t\tdata-title=\"5\"\n\t\t\t\tdata-description=\"The PowerShell script that does the import.\"\n\t\t\t\tdata-image-slug=\"5-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"3e22e4eea6f654a0c3170256d21c0160\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"5\"\n\t\t\t\t\talt=\"5\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-new-user\/thumbs\/thumbs_5.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\n\t<br style=\"clear: both\" \/>\n\n\t\n\t\t<div class=\"ngg-clear\"><\/div>\n\t<\/div>\n<\/p>\n<h4>Alerting the service desk when a student or staff member leaves the school<\/h4>\n<p>Its an unfortunate fact that its people and not systems that are the biggest security risk to any company\/<a href=\"http:\/\/www.wsj.com\/articles\/SB10001424053111904836104576556421692299218\">business (nice read here about this<\/a>); in particular any staff member who leaves the employment of a company without having their computer account disabled could have access to sensitive information as such its important to close these security holes as soon as they appear. In my experience its all too possible for the people who run and manage employment databases can forget (or not think that its important) that ICT services are informed when a person leaves and as such it really helps to tap into these services and generate automated reports when people leave.<\/p>\n<p>As a side note in schools I&#8217;ve seen cases where before leaving a school a student passes their login details to other students, perhaps to bypass internet bans or other sanctions.<\/p>\n<p>Here comes SSIS&#8230;<\/p>\n<ol>\n<li>For this package every 30 minutes a report is run (as a CSV) which exports the PersonID, Forename and Surname of any staff member who has a leaving date set, this information is then imported into a SQL database (using a Slowly Changing Dimension transformation to detect any already imported duplicates).<\/li>\n<li>Using the data stored in the SQL database a CSV is generated and emailed to the service desk with a link to the procedure to carry out whenever a staff member leaves.<\/li>\n<li>A field is then set in the SQL database that lists the person as already exported thus preventing any further automated notifications about this account being generated.<\/li>\n<\/ol>\n<p>Originally when working on this package I considered designing it to automatically disable the staff members account on a set date however after consideration I thought it best to leave a human &#8216;in the loop&#8217; here &#8211; particularly as it could in theory allow non IT staff members to maliciously disable accounts!<\/p>\n<p>The process is slightly different for students where the process only emails the service desk once that student leaves the school and not prior.<\/p>\n<p><!-- default-view.php -->\n<div\n\tclass=\"ngg-galleryoverview default-view\n\t ngg-ajax-pagination-none\t\"\n\tid=\"ngg-gallery-2cbfe85c754b14f7000928c1c8685a1a-1\"\n\tdata-gallery-id=\"98\">\n\n\t\t<!-- Thumbnails -->\n\t\t\t\t<div id=\"ngg-image-0\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-leaver\/1.PNG\"\n\t\t\t\ttitle=\"One of the more simple SSIS packages...\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-leaver\/1.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-leaver\/thumbs\/thumbs_1.PNG\"\n\t\t\t\tdata-image-id=\"810\"\n\t\t\t\tdata-title=\"1\"\n\t\t\t\tdata-description=\"One of the more simple SSIS packages...\"\n\t\t\t\tdata-image-slug=\"1-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"2cbfe85c754b14f7000928c1c8685a1a\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"1\"\n\t\t\t\t\talt=\"1\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-leaver\/thumbs\/thumbs_1.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-1\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-leaver\/2.PNG\"\n\t\t\t\ttitle=\"Here the data that is going into the SQL table is checked to see if there are any new leavers recorded and if so they are sent to a CSV file.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-leaver\/2.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-leaver\/thumbs\/thumbs_2.PNG\"\n\t\t\t\tdata-image-id=\"811\"\n\t\t\t\tdata-title=\"2\"\n\t\t\t\tdata-description=\"Here the data that is going into the SQL table is checked to see if there are any new leavers recorded and if so they are sent to a CSV file.\"\n\t\t\t\tdata-image-slug=\"2-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"2cbfe85c754b14f7000928c1c8685a1a\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"2\"\n\t\t\t\t\talt=\"2\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-leaver\/thumbs\/thumbs_2.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-2\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-leaver\/3.PNG\"\n\t\t\t\ttitle=\"Here the package checks to see if there is anything to email out.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-leaver\/3.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-leaver\/thumbs\/thumbs_3.PNG\"\n\t\t\t\tdata-image-id=\"812\"\n\t\t\t\tdata-title=\"3\"\n\t\t\t\tdata-description=\"Here the package checks to see if there is anything to email out.\"\n\t\t\t\tdata-image-slug=\"3-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"2cbfe85c754b14f7000928c1c8685a1a\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"3\"\n\t\t\t\t\talt=\"3\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-leaver\/thumbs\/thumbs_3.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\n\t<br style=\"clear: both\" \/>\n\n\t\n\t\t<div class=\"ngg-clear\"><\/div>\n\t<\/div>\n<\/p>\n<h4>Importing new staff members into the asset management system<\/h4>\n<p>Where I work we use the WASP asset management system, one of the things which drew me to this system is it uses a SQL database to store all of the information on assets and who they are checked out to (compared to web based services which don&#8217;t offer a way to programmatically access the information).<\/p>\n<p>For this SSIS package we have-<\/p>\n<ol>\n<li>Every 30 minutes using the ADO.NET connector the user information in Active Directory is read (including the unique employeeID, Forename, Surname and Job Title)\u00a0 using calculated fields the additional database fields that are used by the asset management system are generated.<\/li>\n<li>Next using the slowly changing dimension transform this information is compared with the information in the asset management system and any changes or additions are made to the database.<\/li>\n<\/ol>\n<p><!-- default-view.php -->\n<div\n\tclass=\"ngg-galleryoverview default-view\n\t ngg-ajax-pagination-none\t\"\n\tid=\"ngg-gallery-63b1f1916580a3c7b8cb2a09ef44dc5f-1\"\n\tdata-gallery-id=\"99\">\n\n\t\t<!-- Thumbnails -->\n\t\t\t\t<div id=\"ngg-image-0\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-wasp\/1.PNG\"\n\t\t\t\ttitle=\"A few extras here that are specific to the way that WASP wants to read the information.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-wasp\/1.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-wasp\/thumbs\/thumbs_1.PNG\"\n\t\t\t\tdata-image-id=\"813\"\n\t\t\t\tdata-title=\"1\"\n\t\t\t\tdata-description=\"A few extras here that are specific to the way that WASP wants to read the information.\"\n\t\t\t\tdata-image-slug=\"1-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"63b1f1916580a3c7b8cb2a09ef44dc5f\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"1\"\n\t\t\t\t\talt=\"1\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-wasp\/thumbs\/thumbs_1.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-1\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-wasp\/2.PNG\"\n\t\t\t\ttitle=\"Here AD is queried a few data conversions performed (as AD doesn&#039;t store the information in a way that SQL likes) and any new or changed records imported into the WASP database.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-wasp\/2.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-wasp\/thumbs\/thumbs_2.PNG\"\n\t\t\t\tdata-image-id=\"814\"\n\t\t\t\tdata-title=\"2\"\n\t\t\t\tdata-description=\"Here AD is queried a few data conversions performed (as AD doesn&#039;t store the information in a way that SQL likes) and any new or changed records imported into the WASP database.\"\n\t\t\t\tdata-image-slug=\"2-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"63b1f1916580a3c7b8cb2a09ef44dc5f\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"2\"\n\t\t\t\t\talt=\"2\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-wasp\/thumbs\/thumbs_2.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-2\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-wasp\/3.PNG\"\n\t\t\t\ttitle=\"The query that extracts information out of AD.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-wasp\/3.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-wasp\/thumbs\/thumbs_3.PNG\"\n\t\t\t\tdata-image-id=\"815\"\n\t\t\t\tdata-title=\"3\"\n\t\t\t\tdata-description=\"The query that extracts information out of AD.\"\n\t\t\t\tdata-image-slug=\"3-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"63b1f1916580a3c7b8cb2a09ef44dc5f\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"3\"\n\t\t\t\t\talt=\"3\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-wasp\/thumbs\/thumbs_3.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\n\t<br style=\"clear: both\" \/>\n\n\t\n\t\t<div class=\"ngg-clear\"><\/div>\n\t<\/div>\n<\/p>\n<h4>Emailing a report on printing activity to the finance department<\/h4>\n<p>Where I work we have a managed approach to printing in that departments are charged a fixed cost per printed page which is charged back to the ICT Services department to cover the cost of consumables. As part of this we use the Equitrac print management solution which logs all of the printers in a SQL database (you can see where I&#8217;m going here!).<\/p>\n<p>The sequence for the SSIS package is<\/p>\n<ol>\n<li>On the last day of every month the SSIS package runs and reads the data from the printing logs table (which includes the department that should be charged along with the cost of the printed material) in the print management database.<\/li>\n<li>This data is then filtered to only list the current month and year with the results exported into a CSV (stored on a network path) that contains the name of the month and the year.<\/li>\n<li>An email is then generated with the printing report attached and sent to the finance department to action.<\/li>\n<\/ol>\n<p>This is by far my favourite SSIS package that I have deployed at the moment, the reason is simple &#8211; its a pretty dull monthly task that I&#8217;d forget if I wasn&#8217;t reminded about.<\/p>\n<p><!-- default-view.php -->\n<div\n\tclass=\"ngg-galleryoverview default-view\n\t ngg-ajax-pagination-none\t\"\n\tid=\"ngg-gallery-2ffe213cee95a9ead553689fd0ece78b-1\"\n\tdata-gallery-id=\"100\">\n\n\t\t<!-- Thumbnails -->\n\t\t\t\t<div id=\"ngg-image-0\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/1.PNG\"\n\t\t\t\ttitle=\"Very simple process here, read data and email it out.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/1.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/thumbs\/thumbs_1.PNG\"\n\t\t\t\tdata-image-id=\"816\"\n\t\t\t\tdata-title=\"1\"\n\t\t\t\tdata-description=\"Very simple process here, read data and email it out.\"\n\t\t\t\tdata-image-slug=\"1-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"2ffe213cee95a9ead553689fd0ece78b\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"1\"\n\t\t\t\t\talt=\"1\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/thumbs\/thumbs_1.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-1\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/2.PNG\"\n\t\t\t\ttitle=\"Here the data is extracted out of the print management database, the data we are after is selected (including the right month\/year) and sent into a CSV.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/2.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/thumbs\/thumbs_2.PNG\"\n\t\t\t\tdata-image-id=\"817\"\n\t\t\t\tdata-title=\"2\"\n\t\t\t\tdata-description=\"Here the data is extracted out of the print management database, the data we are after is selected (including the right month\/year) and sent into a CSV.\"\n\t\t\t\tdata-image-slug=\"2-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"2ffe213cee95a9ead553689fd0ece78b\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"2\"\n\t\t\t\t\talt=\"2\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/thumbs\/thumbs_2.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-2\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/3.PNG\"\n\t\t\t\ttitle=\"Instead of multiple listings of the same department (which multiple staff work for) an aggregated value is calculated.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/3.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/thumbs\/thumbs_3.PNG\"\n\t\t\t\tdata-image-id=\"818\"\n\t\t\t\tdata-title=\"3\"\n\t\t\t\tdata-description=\"Instead of multiple listings of the same department (which multiple staff work for) an aggregated value is calculated.\"\n\t\t\t\tdata-image-slug=\"3-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"2ffe213cee95a9ead553689fd0ece78b\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"3\"\n\t\t\t\t\talt=\"3\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/thumbs\/thumbs_3.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-3\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/4.PNG\"\n\t\t\t\ttitle=\"The name of the CSV report is based upon the month and year and so the email has to work out these details as well to be attached.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/4.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/thumbs\/thumbs_4.PNG\"\n\t\t\t\tdata-image-id=\"819\"\n\t\t\t\tdata-title=\"4\"\n\t\t\t\tdata-description=\"The name of the CSV report is based upon the month and year and so the email has to work out these details as well to be attached.\"\n\t\t\t\tdata-image-slug=\"4-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"2ffe213cee95a9ead553689fd0ece78b\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"4\"\n\t\t\t\t\talt=\"4\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-email-finance\/thumbs\/thumbs_4.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\n\t<br style=\"clear: both\" \/>\n\n\t\n\t\t<div class=\"ngg-clear\"><\/div>\n\t<\/div>\n<\/p>\n<h4>Generating email distribution lists automatically<\/h4>\n<p>I hate to say it but email is here to stay (although &#8216;enterprise social&#8217; seems to be gaining traction fast of late) and one element of email is distribution lists. This SSIS package is still a work in process and relies on a rather crude method of keeping he lists up to date but for now it works&#8230;well kind of\u00a0 \ud83d\ude42<\/p>\n<ol>\n<li>Using commandreporter.exe reports are generated which contains the year group that students are in and which house they are in along with reports for the staff members containing which subjects they teach along with the house that staff members are in.<\/li>\n<li>The current information in locally held SQL tables is then deleted and\u00a0the information from the reports is imported, a lookup of the PersonID (reports) against employeeID (in Active Directory) is then performed and the usernames imported into the tables.<\/li>\n<li>This information is then exported into a number of CSVs which in turned is passed to a PowerShell script which deletes all of the users currently in the distribution groups before importing all of the new ones.<\/li>\n<\/ol>\n<p>As you can tell this is a very messy process, indeed right now this package takes 2 hours to run and is only run once a day overnight. My hope is that in the future I&#8217;ll be able to get it to work out the changes to the distribution groups (additions and removals) which will in turn speed up the execution massively.<\/p>\n<p><!-- default-view.php -->\n<div\n\tclass=\"ngg-galleryoverview default-view\n\t ngg-ajax-pagination-none\t\"\n\tid=\"ngg-gallery-bff73e378b7e2479d8f15901c27eb366-1\"\n\tdata-gallery-id=\"101\">\n\n\t\t<!-- Thumbnails -->\n\t\t\t\t<div id=\"ngg-image-0\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/1.PNG\"\n\t\t\t\ttitle=\"Quite a few things going on here, reports being generated from SIMS, employeeIDs being retrieved from Active Directory and the reports being transformed into CSVs to be fed into PowerShell.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/1.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/thumbs\/thumbs_1.PNG\"\n\t\t\t\tdata-image-id=\"820\"\n\t\t\t\tdata-title=\"1\"\n\t\t\t\tdata-description=\"Quite a few things going on here, reports being generated from SIMS, employeeIDs being retrieved from Active Directory and the reports being transformed into CSVs to be fed into PowerShell.\"\n\t\t\t\tdata-image-slug=\"1-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"bff73e378b7e2479d8f15901c27eb366\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"1\"\n\t\t\t\t\talt=\"1\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/thumbs\/thumbs_1.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-1\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/2.PNG\"\n\t\t\t\ttitle=\"The part of the package which works out which year group a student is in, a little quirk of SIMS is that there is a double space between the word Year and the number for any single digit year group (7, 8 and 9).\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/2.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/thumbs\/thumbs_2.PNG\"\n\t\t\t\tdata-image-id=\"821\"\n\t\t\t\tdata-title=\"2\"\n\t\t\t\tdata-description=\"The part of the package which works out which year group a student is in, a little quirk of SIMS is that there is a double space between the word Year and the number for any single digit year group (7, 8 and 9).\"\n\t\t\t\tdata-image-slug=\"2-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"bff73e378b7e2479d8f15901c27eb366\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"2\"\n\t\t\t\t\talt=\"2\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/thumbs\/thumbs_2.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-2\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/3.PNG\"\n\t\t\t\ttitle=\"The house assignment is a lot simpler :)\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/3.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/thumbs\/thumbs_3.PNG\"\n\t\t\t\tdata-image-id=\"822\"\n\t\t\t\tdata-title=\"3\"\n\t\t\t\tdata-description=\"The house assignment is a lot simpler :)\"\n\t\t\t\tdata-image-slug=\"3-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"bff73e378b7e2479d8f15901c27eb366\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"3\"\n\t\t\t\t\talt=\"3\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/thumbs\/thumbs_3.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-3\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/4.PNG\"\n\t\t\t\ttitle=\"Staff to department mail lists are calculated based upon the department a staff member is in. There are a few overrides built into the PowerShell script as some staff members (e.g. Technicians) are part of departments even though they don&#039;t teach.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/4.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/thumbs\/thumbs_4.PNG\"\n\t\t\t\tdata-image-id=\"823\"\n\t\t\t\tdata-title=\"4\"\n\t\t\t\tdata-description=\"Staff to department mail lists are calculated based upon the department a staff member is in. There are a few overrides built into the PowerShell script as some staff members (e.g. Technicians) are part of departments even though they don&#039;t teach.\"\n\t\t\t\tdata-image-slug=\"4-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"bff73e378b7e2479d8f15901c27eb366\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"4\"\n\t\t\t\t\talt=\"4\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/thumbs\/thumbs_4.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t<div id=\"ngg-image-4\" class=\"ngg-gallery-thumbnail-box\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t>\n\t\t\t\t\t\t<div class=\"ngg-gallery-thumbnail\">\n\t\t\t<a href=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/5.PNG\"\n\t\t\t\ttitle=\"Not a very pretty way to update the mail list but here everything is deleted and then imported in again.\"\n\t\t\t\tdata-src=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/5.PNG\"\n\t\t\t\tdata-thumbnail=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/thumbs\/thumbs_5.PNG\"\n\t\t\t\tdata-image-id=\"824\"\n\t\t\t\tdata-title=\"5\"\n\t\t\t\tdata-description=\"Not a very pretty way to update the mail list but here everything is deleted and then imported in again.\"\n\t\t\t\tdata-image-slug=\"5-10\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ngg-fancybox\" rel=\"bff73e378b7e2479d8f15901c27eb366\">\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\ttitle=\"5\"\n\t\t\t\t\talt=\"5\"\n\t\t\t\t\tsrc=\"https:\/\/myworldofit.net\/wp-content\/gallery\/ssis-update-dgs\/thumbs\/thumbs_5.PNG\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"75\"\n\t\t\t\t\tstyle=\"max-width:100%;\"\n\t\t\t\t\/>\n\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\n\t<br style=\"clear: both\" \/>\n\n\t\n\t\t<div class=\"ngg-clear\"><\/div>\n\t<\/div>\n<\/p>\n<h4>That&#8217;s all folks&#8230;<\/h4>\n<p>Hopefully this post will spark off some ideas in everyone; maybe one day I&#8217;ll have the time to put each process into its own guide but in the meantime if you would like to chat about how this works just let me know through the comments box.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Microsoft SQL Server Integration Services (SSIS) is a powerful tool that comes with any of the paid editions of SQL server. By design its main function is to extract, transform and load data into databases however by mixing in CSV exports and PowerShell commands it can help automate various workflows. Although I won&#8217;t delve into too much detail in this&#8230; <a class=\"read-more\" href=\"https:\/\/myworldofit.net\/?p=8445\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[11,20],"tags":[126,256,253,254],"series":[],"class_list":["post-8445","post","type-post","status-publish","format-standard","hentry","category-servers","category-software","tag-active-directory","tag-automation","tag-sql-server","tag-ssis"],"_links":{"self":[{"href":"https:\/\/myworldofit.net\/index.php?rest_route=\/wp\/v2\/posts\/8445","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/myworldofit.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/myworldofit.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/myworldofit.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/myworldofit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8445"}],"version-history":[{"count":12,"href":"https:\/\/myworldofit.net\/index.php?rest_route=\/wp\/v2\/posts\/8445\/revisions"}],"predecessor-version":[{"id":8516,"href":"https:\/\/myworldofit.net\/index.php?rest_route=\/wp\/v2\/posts\/8445\/revisions\/8516"}],"wp:attachment":[{"href":"https:\/\/myworldofit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/myworldofit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/myworldofit.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8445"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/myworldofit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=8445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}