{"id":1492,"date":"2011-06-02T09:08:51","date_gmt":"2011-06-02T13:08:51","guid":{"rendered":"http:\/\/jdhitsolutions.com\/blog\/?p=1492"},"modified":"2011-06-02T09:08:51","modified_gmt":"2011-06-02T13:08:51","slug":"creating-acl-reports","status":"publish","type":"post","link":"https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/","title":{"rendered":"Creating ACL Reports"},"content":{"rendered":"<p>I saw a tweet this morning that was a PowerShell one-liner for capturing folder permissions to a text file. There's nothing wrong with it but it's hard to be truly productive in 140 characters so I thought I would take the idea and run with it a little bit. Here are some ways you might want to extend the concept.<!--more--><\/p>\n<p>The basic premise is to pass a bunch of folders and save the results somewhere. For the sake of flexibility and clarity I'll save my ACL results to a variable.<\/p>\n<p>[cc lang=\"PowerShell\"]<br \/>\n$root=\"c:\\scripts\"<br \/>\n$acldata=dir $root -Recurse | Where {$_.PSIsContainer} | Get-ACL<br \/>\n [\/cc]<\/p>\n<p>I always like seeing what kind of information is available so let me check the first item in $acldata.<\/p>\n<p>[cc lang=\"DOS\"]<br \/>\nPS C:\\> $acldata[0] | Select *<\/p>\n<p>PSPath                  : Microsoft.PowerShell.Core\\FileSystem::C:\\scripts\\ad<br \/>\nPSParentPath            : Microsoft.PowerShell.Core\\FileSystem::C:\\scripts<br \/>\nPSChildName             : ad<br \/>\nPSProvider              : Microsoft.PowerShell.Core\\FileSystem<br \/>\nAccessToString          : BUILTIN\\Administrators Allow  FullControl<br \/>\n                          BUILTIN\\Administrators Allow  268435456<br \/>\n                          NT AUTHORITY\\SYSTEM Allow  FullControl<br \/>\n                          NT AUTHORITY\\SYSTEM Allow  268435456<br \/>\n                          BUILTIN\\Users Allow  ReadAndExecute, Synchronize<br \/>\n                          NT AUTHORITY\\Authenticated Users Allow  Modify, Synchronize<br \/>\n                          NT AUTHORITY\\Authenticated Users Allow  -536805376<br \/>\nAuditToString           :<br \/>\nPath                    : Microsoft.PowerShell.Core\\FileSystem::C:\\scripts\\ad<br \/>\nOwner                   : SERENITY\\Jeff<br \/>\nGroup                   : SERENITY\\None<br \/>\nAccess                  : {System.Security.AccessControl.FileSystemAccessRule, System.Security.AccessControl.FileSystemAccessRule, System.Security.AccessControl.FileSystemAcces<br \/>\n                          sRule, System.Security.AccessControl.FileSystemAccessRule...}<br \/>\nSddl                    : O:S-1-5-21-2858895768-3673612314-3109562570-1000G:S-1-5-21-2858895768-3673612314-3109562570-513D:AI(A;ID;FA;;;BA)(A;OICIIOID;GA;;;BA)(A;ID;FA;;;SY)(A;<br \/>\n                          OICIIOID;GA;;;SY)(A;OICIID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)<br \/>\nAccessRightType         : System.Security.AccessControl.FileSystemRights<br \/>\nAccessRuleType          : System.Security.AccessControl.FileSystemAccessRule<br \/>\nAuditRuleType           : System.Security.AccessControl.FileSystemAuditRule<br \/>\nAreAccessRulesProtected : False<br \/>\nAreAuditRulesProtected  : False<br \/>\nAreAccessRulesCanonical : True<br \/>\nAreAuditRulesCanonical  : True<br \/>\n [\/cc]<\/p>\n<p>Ok. Lots of good stuff. For a simple report, I can grab a few key properties, format as a list and send to a file.<\/p>\n<p>[cc lang=\"PowerShell\"]<br \/>\n$acldata | Format-List Path,Owner,AccessToString,SDDL | Out-File ACLReport.txt<br \/>\n [\/cc]<\/p>\n<p>But we can do better. For example, I wish the path was just the file system path. No problem, I'll use a hash table and define a new property. While I'm at it I'll improve the AccessToString property.<\/p>\n<p>[cc lang=\"PowerShell\"]<br \/>\n$aclData | Select @{Name=\"Path\";Expression={$_.PSPath.Substring($_.PSPath.IndexOf(\":\")+2) }},<br \/>\nOwner,@{Name=\"ACL\";Expression={$_.AccessToString}},SDDL | Out-File ACLReport.txt<br \/>\n[\/cc]<\/p>\n<p>The downside is that I end up with a text file, which I suppose is fine for small folder structures, and it is reader-friendly. But it is not easy to search or extract information from. For me, I think the better approach is to archive the data in an XML format using Export-Clixml.  Export-CSV is not a good option here because the Access property is a collection of access rule objects and CSVs can't properly capture this level of complexity. <\/p>\n<p> [cc lang=\"Powershell\"]<br \/>\n$aclData | Select @{Name=\"Path\";Expression={$_.PSPath.Substring($_.PSPath.IndexOf(\":\")+2) }},<br \/>\nOwner,Access,AccessToString,Sddl,@{Name=\"Reported\";Expression={(Get-Date).ToShortDateString()}},<br \/>\n@{Name=\"Computername\";Expression={$env:computername}} | Export-Clixml e:\\temp\\acldata.xml<br \/>\n [\/cc]<\/p>\n<p>I've also added a few properties to capture the computername and the date of ALC scan. Now I have richer data, stored in a text file for archival or research purposes.  Later on, the file can be imported back into PowerShell.<\/p>\n<p>[cc lang=\"DOS\"]<br \/>\nPS C:\\> $acl=Import-Clixml E:\\acldata.xml<br \/>\n [\/cc]<\/p>\n<p>Now I can search the data using PowerShell.<\/p>\n<p>[cc lang=\"DOS\"]<br \/>\nPS C:\\> $acl | select Path,Owner<\/p>\n<p>Path                                                        Owner<br \/>\n----                                                        -----<br \/>\nC:\\scripts\\ad                                               SERENITY\\Jeff<br \/>\nC:\\scripts\\de-DE                                            BUILTIN\\Administrators<br \/>\nC:\\scripts\\Demos                                            BUILTIN\\Administrators<br \/>\nC:\\scripts\\en-US                                            BUILTIN\\Administrators<br \/>\nC:\\scripts\\modhelp                                          BUILTIN\\Administrators<br \/>\nC:\\scripts\\PowerShellBingo                                  BUILTIN\\Administrators<br \/>\nC:\\scripts\\PS-TFM                                           BUILTIN\\Administrators<br \/>\nC:\\scripts\\ad\\New                                           SERENITY\\Jeff<br \/>\n [\/cc]<\/p>\n<p>Or perhaps I want to find folders where Users have FullControl. <\/p>\n<p>[cc lang=\"PowerShell\"]<br \/>\nPS C:\\> $acl | where {$_.access | where {$_.FileSystemRights -match \"FullControl\" -AND $_.IdentityReference -match \"Users\"}} |<br \/>\n>> format-list Path,AccessToString<br \/>\n>><\/p>\n<p>Path           : C:\\scripts\\Demos<br \/>\nAccessToString : NT AUTHORITY\\Authenticated Users Allow  FullControl<br \/>\n                 BUILTIN\\Users Allow  FullControl<br \/>\n                 BUILTIN\\Administrators Allow  FullControl<br \/>\n                 BUILTIN\\Administrators Allow  268435456<br \/>\n                 NT AUTHORITY\\SYSTEM Allow  FullControl<br \/>\n                 NT AUTHORITY\\SYSTEM Allow  268435456<br \/>\n                 BUILTIN\\Users Allow  ReadAndExecute, Synchronize<br \/>\n                 NT AUTHORITY\\Authenticated Users Allow  Modify, Synchronize<br \/>\n                 NT AUTHORITY\\Authenticated Users Allow  -536805376<br \/>\n [\/cc]<\/p>\n<p>This is a little tricky because the Access property is a collection of nested rule objects, but it works.<\/p>\n<p>The bottom line is, when archiving information consider who is going to use it and how. Take a little extra time to include information that might be outside the scope of the primary task, but potentially useful as I did by including a date and computername. This type of context may be invaluable when you look at the data a year from now. PowerShell makes it easy to do, so why aren't you?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I saw a tweet this morning that was a PowerShell one-liner for capturing folder permissions to a text file. There&#8217;s nothing wrong with it but it&#8217;s hard to be truly productive in 140 characters so I thought I would take the idea and run with it a little bit. Here are some ways you might&#8230;<\/p>\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,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[60,75,8],"tags":[294,293,241,534,540,206],"class_list":["post-1492","post","type-post","status-publish","format-standard","hentry","category-best-practices","category-powershell-v2-0","category-scripting","tag-export-clixml","tag-get-acl","tag-out-file","tag-powershell","tag-scripting","tag-xml"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Creating ACL Reports &#8226; The Lonely Administrator<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating ACL Reports &#8226; The Lonely Administrator\" \/>\n<meta property=\"og:description\" content=\"I saw a tweet this morning that was a PowerShell one-liner for capturing folder permissions to a text file. There&#039;s nothing wrong with it but it&#039;s hard to be truly productive in 140 characters so I thought I would take the idea and run with it a little bit. Here are some ways you might...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/\" \/>\n<meta property=\"og:site_name\" content=\"The Lonely Administrator\" \/>\n<meta property=\"article:published_time\" content=\"2011-06-02T13:08:51+00:00\" \/>\n<meta name=\"author\" content=\"Jeffery Hicks\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@JeffHicks\" \/>\n<meta name=\"twitter:site\" content=\"@JeffHicks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeffery Hicks\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/scripting\\\/1492\\\/creating-acl-reports\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/scripting\\\/1492\\\/creating-acl-reports\\\/\"},\"author\":{\"name\":\"Jeffery Hicks\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\"},\"headline\":\"Creating ACL Reports\",\"datePublished\":\"2011-06-02T13:08:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/scripting\\\/1492\\\/creating-acl-reports\\\/\"},\"wordCount\":801,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\"},\"keywords\":[\"Export-Clixml\",\"Get-ACL\",\"Out-File\",\"PowerShell\",\"Scripting\",\"xml\"],\"articleSection\":[\"Best Practices\",\"PowerShell v2.0\",\"Scripting\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/scripting\\\/1492\\\/creating-acl-reports\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/scripting\\\/1492\\\/creating-acl-reports\\\/\",\"url\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/scripting\\\/1492\\\/creating-acl-reports\\\/\",\"name\":\"Creating ACL Reports &#8226; The Lonely Administrator\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#website\"},\"datePublished\":\"2011-06-02T13:08:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/scripting\\\/1492\\\/creating-acl-reports\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/scripting\\\/1492\\\/creating-acl-reports\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/scripting\\\/1492\\\/creating-acl-reports\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Best Practices\",\"item\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/category\\\/best-practices\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Creating ACL Reports\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/\",\"name\":\"The Lonely Administrator\",\"description\":\"Practical Advice for the Automating IT Pro\",\"publisher\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\",\"name\":\"Jeffery Hicks\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\",\"caption\":\"Jeffery Hicks\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Creating ACL Reports &#8226; The Lonely Administrator","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/","og_locale":"en_US","og_type":"article","og_title":"Creating ACL Reports &#8226; The Lonely Administrator","og_description":"I saw a tweet this morning that was a PowerShell one-liner for capturing folder permissions to a text file. There's nothing wrong with it but it's hard to be truly productive in 140 characters so I thought I would take the idea and run with it a little bit. Here are some ways you might...","og_url":"https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/","og_site_name":"The Lonely Administrator","article_published_time":"2011-06-02T13:08:51+00:00","author":"Jeffery Hicks","twitter_card":"summary_large_image","twitter_creator":"@JeffHicks","twitter_site":"@JeffHicks","twitter_misc":{"Written by":"Jeffery Hicks","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/#article","isPartOf":{"@id":"https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/"},"author":{"name":"Jeffery Hicks","@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9"},"headline":"Creating ACL Reports","datePublished":"2011-06-02T13:08:51+00:00","mainEntityOfPage":{"@id":"https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/"},"wordCount":801,"commentCount":5,"publisher":{"@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9"},"keywords":["Export-Clixml","Get-ACL","Out-File","PowerShell","Scripting","xml"],"articleSection":["Best Practices","PowerShell v2.0","Scripting"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/","url":"https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/","name":"Creating ACL Reports &#8226; The Lonely Administrator","isPartOf":{"@id":"https:\/\/jdhitsolutions.com\/blog\/#website"},"datePublished":"2011-06-02T13:08:51+00:00","breadcrumb":{"@id":"https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jdhitsolutions.com\/blog\/scripting\/1492\/creating-acl-reports\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Best Practices","item":"https:\/\/jdhitsolutions.com\/blog\/category\/best-practices\/"},{"@type":"ListItem","position":2,"name":"Creating ACL Reports"}]},{"@type":"WebSite","@id":"https:\/\/jdhitsolutions.com\/blog\/#website","url":"https:\/\/jdhitsolutions.com\/blog\/","name":"The Lonely Administrator","description":"Practical Advice for the Automating IT Pro","publisher":{"@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jdhitsolutions.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9","name":"Jeffery Hicks","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg","caption":"Jeffery Hicks"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg"}}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":2390,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2390\/get-acl-information-with-powershell\/","url_meta":{"origin":1492,"position":0},"title":"Get ACL Information with PowerShell","author":"Jeffery Hicks","date":"June 21, 2012","format":false,"excerpt":"I got a question in the \"Ask Don and Jeff\" forum on PowerShell.com that intrigued me. The issue was working with the results of the Get-ACL cmdlet. The resulting object includes a property called Access which is a collection of access rule objects. Assuming you are using this with the\u2026","rel":"","context":"In &quot;PowerShell&quot;","block_context":{"text":"PowerShell","link":"https:\/\/jdhitsolutions.com\/blog\/category\/powershell\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/06\/get-aclinfo-1-300x77.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":2403,"url":"https:\/\/jdhitsolutions.com\/blog\/scripting\/2403\/working-with-access-rules-in-powershell\/","url_meta":{"origin":1492,"position":1},"title":"Working with Access Rules in PowerShell","author":"Jeffery Hicks","date":"June 22, 2012","format":false,"excerpt":"Yesterday I posted a function to create a summary report of ACL information using Windows PowerShell. I posted this in response to a question in the Ask Don and Jeff forum at PowerShell.com. I received an appreciative followup. The next step for this IT Pro it seems is to get\u2026","rel":"","context":"In &quot;Scripting&quot;","block_context":{"text":"Scripting","link":"https:\/\/jdhitsolutions.com\/blog\/category\/scripting\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1625,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/1625\/get-process-owner\/","url_meta":{"origin":1492,"position":2},"title":"Get Process Owner","author":"Jeffery Hicks","date":"August 25, 2011","format":false,"excerpt":"I've been working on my second training course for Train Signal on managing Windows Server 2008 with Windows PowerShell, specifically the lesson on managing processes. I thought I'd share a little tidbit I worked out. In fact, I hope you'll stay tuned for other little goodies over the next several\u2026","rel":"","context":"In &quot;PowerShell&quot;","block_context":{"text":"PowerShell","link":"https:\/\/jdhitsolutions.com\/blog\/category\/powershell\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1584,"url":"https:\/\/jdhitsolutions.com\/blog\/scripting\/1584\/friday-fun-add-scripting-signing-to-the-ise\/","url_meta":{"origin":1492,"position":3},"title":"Friday Fun Add Scripting Signing to the ISE","author":"Jeffery Hicks","date":"August 5, 2011","format":false,"excerpt":"Today's fun involves adding a menu item to the PowerShell ISE to make it easy to sign your scripts. I'm not going to go into the details about getting and installing a code signing certificate. I also assume you only have one installed. You can get this certificate by seasrching\u2026","rel":"","context":"In &quot;PowerShell ISE&quot;","block_context":{"text":"PowerShell ISE","link":"https:\/\/jdhitsolutions.com\/blog\/category\/powershell-ise\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1136,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/1136\/friday-fun-snappy-shortcuts\/","url_meta":{"origin":1492,"position":4},"title":"Friday Fun &#8211; Snappy Shortcuts","author":"Jeffery Hicks","date":"February 11, 2011","format":false,"excerpt":"In one of my recent Prof. PowerShell columns, I wrote about using the Wscript.Shell VBScript object in PowerShell to retrieve special folder paths. Another handy trick is the ability to create shortcut links to either file or web resources. Let me show you how to accomplish this in PowerShell and\u2026","rel":"","context":"In &quot;Friday Fun&quot;","block_context":{"text":"Friday Fun","link":"https:\/\/jdhitsolutions.com\/blog\/category\/friday-fun\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2011\/02\/create-shortcuts-300x185.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1677,"url":"https:\/\/jdhitsolutions.com\/blog\/scripting\/1677\/renaming-files-with-powershell\/","url_meta":{"origin":1492,"position":5},"title":"Renaming Files with PowerShell","author":"Jeffery Hicks","date":"October 12, 2011","format":false,"excerpt":"I am not a big fan of file names with spaces. I realize they are easy to read and obviously much more \"natural\", but they are simply a royal pain to deal with, especially when working from a command prompt or PowerShell. So naturally the solution is to rename these\u2026","rel":"","context":"In &quot;PowerShell v2.0&quot;","block_context":{"text":"PowerShell v2.0","link":"https:\/\/jdhitsolutions.com\/blog\/category\/powershell-v2-0\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/1492","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=1492"}],"version-history":[{"count":0,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/1492\/revisions"}],"wp:attachment":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=1492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=1492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=1492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}