{"id":4875,"date":"2022-08-01T17:55:05","date_gmt":"2022-08-01T15:55:05","guid":{"rendered":"https:\/\/www.msb365.blog\/?p=4875"},"modified":"2022-08-01T17:55:05","modified_gmt":"2022-08-01T15:55:05","slug":"teams-voice-advanced-admin-tool","status":"publish","type":"post","link":"https:\/\/www.msb365.blog\/?p=4875","title":{"rendered":"Advanced version of the Teams Voice Admin Tool"},"content":{"rendered":"<p>A few weeks ago, I wrote a PowerShell script concerning the <a href=\"https:\/\/www.msb365.blog\/?p=4746\" target=\"_blank\" rel=\"noopener\">Teams Voice Admin Tool<\/a>.<br \/>\nThis script received a good response from the community, and I am very pleased that I was able to help some people with their daily work.<\/p>\n<p>In the meantime, I have developed the script further and added more options.<br \/>\nSince the new functions can be helpful, but not everyone needs them, I have decided to rewrite my Voice Admin script and publish it as Teams Voice Admin tool &#8211; advanced.<\/p>\n<p>&nbsp;<\/p>\n<h3>What can the new advanced script do? What is different from the current script?<\/h3>\n<p>Well, on the one hand, I have added four more management options.<br \/>\nThese are:<\/p>\n<ul>\n<li>Adding\/changing telephone number to Auto Attendant account<\/li>\n<li>Assigning\/changing caller ID policies<\/li>\n<li>Assigning\/changing User calling policies<\/li>\n<li>Assigning\/changing Auto Attendant voice routing policies (Outbound forwarding)<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>The reason for the new functions are my experiences with Teams Voice projects.<br \/>\nIt is always the case (for me) that I build the target architecture as discussed with the customer. However, before going live, I always use test number blocks and test policies to test the built voice architecture. Once these tests are successfully completed, the final numbers and policies are assigned.<br \/>\nEspecially when testing outbound call forwarding from Auto Attendants, it is important that the correct policies are set.<\/p>\n<p>I like to work with CSV files so that the final changeover after the test period is successful, and I have a final check\/overview of everything. I also prefer to use a tool for the migration that is structured so that I can work through all the tasks step by step.<\/p>\n<p>Therefore, I have summarized some of my Teams Voice scripts here.<\/p>\n<p>Chapters one to three continue to work as I described them in my <a href=\"https:\/\/www.msb365.blog\/?p=4746\" target=\"_blank\" rel=\"noopener\">previous article<\/a>.<\/p>\n<p>The new functions work self-explanatory and analogous to option 1 in the &#8220;old&#8221; script.<\/p>\n<p>What is new in this script, however, is the format of the CSV file.<br \/>\nThis now has several fields that have to be filled in and looks like this in this script:<\/p>\n<pre>\"UserPrincipalName\",\"DisplayName\",\"AutoAttendantIdentity\",\"TelephoneNumber\",\"TelephoneNumberAutoAttendant\",\"PolicyNameCalling\u201c,\"PolicyNameID\"<\/pre>\n<p>Here is a corresponding screenshot:<\/p>\n<p><a href=\"https:\/\/msb365.abstergo.ch\/wp-content\/uploads\/2022\/06\/CSV-Example-MSB365.png\"><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-4876\" src=\"https:\/\/msb365.abstergo.ch\/wp-content\/uploads\/2022\/06\/CSV-Example-MSB365.png\" alt=\"\" width=\"1206\" height=\"115\" srcset=\"https:\/\/msb365.abstergo.ch\/wp-content\/uploads\/2022\/06\/CSV-Example-MSB365.png 1206w, https:\/\/msb365.abstergo.ch\/wp-content\/uploads\/2022\/06\/CSV-Example-MSB365-300x29.png 300w, https:\/\/msb365.abstergo.ch\/wp-content\/uploads\/2022\/06\/CSV-Example-MSB365-1024x98.png 1024w, https:\/\/msb365.abstergo.ch\/wp-content\/uploads\/2022\/06\/CSV-Example-MSB365-768x73.png 768w, https:\/\/msb365.abstergo.ch\/wp-content\/uploads\/2022\/06\/CSV-Example-MSB365-600x57.png 600w, https:\/\/msb365.abstergo.ch\/wp-content\/uploads\/2022\/06\/CSV-Example-MSB365-905x86.png 905w\" sizes=\"(max-width: 1206px) 100vw, 1206px\" \/><\/a><\/p>\n<p>As you can see, this type of CSV contains all the required variables. This helps to collect all the necessary information in one file and (as a bonus) can also be stored for the documentation repository.<br \/>\nI realize that not all fields are always needed.<br \/>\nIn this case, the value <strong>$null<\/strong> can be entered for the corresponding field.<\/p>\n<p>By the way, the value <strong>$null<\/strong> is also used to reset already set policies or telephone numbers.<\/p>\n<p>I hope that this script will also be put to good use in the community&#8230;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>As always, this script is available for free to anyone who needs it. You can download it from my GitHub repository and use it.<\/p>\n<p>Also, as always, I assume no responsibility for possible misconfigurations and strongly recommend using the first run of this script in a LAB or test environment.<\/p>\n<p>This script can be used and adapted indefinitely, but not sold to third parties.<\/p>\n<blockquote><p><a href=\"https:\/\/github.com\/MSB365\/TeamsVoice-AdminTool-advanced\/blob\/main\/TeamsVoice-AdminTool-advanced.ps1\" target=\"_blank\" rel=\"noopener\">Link to the Script on GitHub<\/a><\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>A few weeks ago, I wrote a PowerShell script concerning the Teams Voice Admin Tool. This script received a good response from the community, and I am very pleased that I was able to help some people with their daily work. In the meantime, I have developed the script further and added more options. Since [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4879,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[1923,15,3],"tags":[],"class_list":["post-4875","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-365","category-ms-teams","category-powershell"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.msb365.blog\/index.php?rest_route=\/wp\/v2\/posts\/4875","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.msb365.blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.msb365.blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.msb365.blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.msb365.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4875"}],"version-history":[{"count":3,"href":"https:\/\/www.msb365.blog\/index.php?rest_route=\/wp\/v2\/posts\/4875\/revisions"}],"predecessor-version":[{"id":4880,"href":"https:\/\/www.msb365.blog\/index.php?rest_route=\/wp\/v2\/posts\/4875\/revisions\/4880"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.msb365.blog\/index.php?rest_route=\/wp\/v2\/media\/4879"}],"wp:attachment":[{"href":"https:\/\/www.msb365.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.msb365.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.msb365.blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}