File System - Create Folder

Octopus.Script exported 2017-04-05 by bobjwalker belongs to ‘File System’ category.

Creates a folder structure that is passed in.

Parameters

When steps based on the template are included in a project’s deployment process, the parameters below can be set.

The folder path to create on the filesystem.

FolderPath

The entire path to the folder, this step will also created nested folders. For example “D:\one\two” will create two folders (‘one’, and then ‘two’ under folder ‘one’). This script will not remove items from the folders.

Read Users

ReadPermissionsTo

A comma separated list of users to grant read permissions to

Write Users

WritePermissionsTo

A comma separated list of users to grant write permissions to

Modify Users

ModifyPermissionsTo

A comma separated list of users to grant modify permissions to

Script body

Steps based on this template will execute the following PowerShell script.

$item = $OctopusParameters['FolderPath']
$readPermissionsTo = $OctopusParameters['ReadPermissionsTo']
$writePermissionsTo = $OctopusParameters['WritePermissionsTo']
$modifyPermissionsTo = $OctopusParameters['ModifyPermissionsTo']


Write-Host "Creating folder $item with permissions."

if((Test-Path $item))
{
    Write-Host "Folder $item already exists"
}
else
{
    New-Item -ItemType directory -Path $item -force
}

# Check item exists
if(!(Test-Path $item))
{
    throw "$item does not exist"
}

# Assign read permissions

if($readPermissionsTo)
{
    $users = $readPermissionsTo.Split(",")
    foreach($user in $users)
    {
        Write-Host "Adding read permissions for $user"
        $acl = Get-Acl $item
        $acl.SetAccessRuleProtection($False, $False)
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
                $user, "Read", "ContainerInherit, ObjectInherit", "None", "Allow")
        $acl.AddAccessRule($rule)
        Set-Acl $item $acl
    }
}

# Assign write permissions

if($writePermissionsTo)
{
    $users = $writePermissionsTo.Split(",")
    foreach($user in $users)
    {
        Write-Host "Adding write permissions for $user"
        $acl = Get-Acl $item
        $acl.SetAccessRuleProtection($False, $False)
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
                $user, "Write", "ContainerInherit, ObjectInherit", "None", "Allow")
        $acl.AddAccessRule($rule)
        Set-Acl $item $acl
    }
}

# Assign modify permissions

if($modifyPermissionsTo)
{
    $users = $modifyPermissionsTo.Split(",")
    foreach($user in $users)
    {
        Write-Host "Adding modify permissions for $user"
        $acl = Get-Acl $item
        $acl.SetAccessRuleProtection($False, $False)
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
                $user, "Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
        $acl.AddAccessRule($rule)
        Set-Acl $item $acl
    }
}

Write-Host "Complete"

Provided under the Apache License version 2.0.

Report an issue

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

{
  "Id": "b7211497-59ea-41e9-b466-c9a46b4c76b3",
  "Name": "File System - Create Folder",
  "Description": "Creates a folder structure that is passed in.",
  "Version": 3,
  "ExportedAt": "2017-04-05T12:30:02.127Z",
  "ActionType": "Octopus.Script",
  "Author": "bobjwalker",
  "Parameters": [
    {
      "Name": "FolderPath",
      "Label": "The folder path to create on the filesystem.",
      "HelpText": "The entire path to the folder, this step will also created nested folders.  For example \"D:\\one\\two\" will create two folders ('one', and then 'two' under folder 'one').  This script will not remove items from the folders.",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "becbcbd1-7026-40f0-a655-eb5861d53557",
      "Name": "ReadPermissionsTo",
      "Label": "Read Users",
      "HelpText": "A comma separated list of users to grant read permissions to",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "029ea466-4907-460a-a3f4-c00b23ad1a96",
      "Name": "WritePermissionsTo",
      "Label": "Write Users",
      "HelpText": "A comma separated list of users to grant write permissions to",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "860e0480-db8d-4669-9b25-00f1ce33d0ac",
      "Name": "ModifyPermissionsTo",
      "Label": "Modify Users",
      "HelpText": "A comma separated list of users to grant modify permissions to",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.ScriptBody": "$item = $OctopusParameters['FolderPath']\n$readPermissionsTo = $OctopusParameters['ReadPermissionsTo']\n$writePermissionsTo = $OctopusParameters['WritePermissionsTo']\n$modifyPermissionsTo = $OctopusParameters['ModifyPermissionsTo']\n\n\nWrite-Host \"Creating folder $item with permissions.\"\n\nif((Test-Path $item))\n{\n    Write-Host \"Folder $item already exists\"\n}\nelse\n{\n    New-Item -ItemType directory -Path $item -force\n}\n\n# Check item exists\nif(!(Test-Path $item))\n{\n    throw \"$item does not exist\"\n}\n\n# Assign read permissions\n\nif($readPermissionsTo)\n{\n    $users = $readPermissionsTo.Split(\",\")\n    foreach($user in $users)\n    {\n        Write-Host \"Adding read permissions for $user\"\n        $acl = Get-Acl $item\n        $acl.SetAccessRuleProtection($False, $False)\n        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule(\n                $user, \"Read\", \"ContainerInherit, ObjectInherit\", \"None\", \"Allow\")\n        $acl.AddAccessRule($rule)\n        Set-Acl $item $acl\n    }\n}\n\n# Assign write permissions\n\nif($writePermissionsTo)\n{\n    $users = $writePermissionsTo.Split(\",\")\n    foreach($user in $users)\n    {\n        Write-Host \"Adding write permissions for $user\"\n        $acl = Get-Acl $item\n        $acl.SetAccessRuleProtection($False, $False)\n        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule(\n                $user, \"Write\", \"ContainerInherit, ObjectInherit\", \"None\", \"Allow\")\n        $acl.AddAccessRule($rule)\n        Set-Acl $item $acl\n    }\n}\n\n# Assign modify permissions\n\nif($modifyPermissionsTo)\n{\n    $users = $modifyPermissionsTo.Split(\",\")\n    foreach($user in $users)\n    {\n        Write-Host \"Adding modify permissions for $user\"\n        $acl = Get-Acl $item\n        $acl.SetAccessRuleProtection($False, $False)\n        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule(\n                $user, \"Modify\", \"ContainerInherit, ObjectInherit\", \"None\", \"Allow\")\n        $acl.AddAccessRule($rule)\n        Set-Acl $item $acl\n    }\n}\n\nWrite-Host \"Complete\"",
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptSource": "Inline",
    "Octopus.Action.RunOnServer": "false",
    "Octopus.Action.Script.ScriptFileName": null,
    "Octopus.Action.Package.FeedId": null,
    "Octopus.Action.Package.PackageId": null
  },
  "Category": "File System",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/file-system-create-folder.json",
  "Website": "/step-templates/b7211497-59ea-41e9-b466-c9a46b4c76b3",
  "Logo": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhQTFRF/////78A/6oAVVVV/++//+q/gICA1dXV/79A/9R///ff/8MQ/9dg/8cg//vv/68A/+ef//PP//rv/7Ug/68Q/+Sv/8sw/9tw/9NQ/89w/+uv/+OP/8pg/89A/8VQ/9+f/9+A/9qP/+/P/99//7cA/7IA/7wA/6sA/+/A39/f/64A2tjX//Tfn5+f/7MA/7sA/74A/60A/9Zw/7gA/74Q/7oA/7UA/7EAi6g4fwAAAuRJREFUeNrs21tT2mAUheEvaaCQQCSczyi29WzP7f//Z6UdZBIIM44us9hf13vbC+eRbLo3qnNKKaWUUkoppZRSSimllFJKKaWUwlVrLhsvbrLqnoai2+yFr2x+fwKOwasZm/oXdEczxDQnOyYhqgn3uQpxDZhz3gdCesQ3r3mIjDfwXagj7NEgKywkXLMgSzCE9mz1wBDaOzDYETYEEUSQ/wPSaz6rQa174pDnt1x5Atm8emtPIGG48gUClJAh/XtPILi36+L3Zz6oVdBF4w32/sIbYmWH6qAPX5fzjio/14Q/W7nnqtIPDnYfFfThkGpPovXu68IhNdKSVyXkoQ7qgQypvwNVFwQDuXkP6oYM8WbYBWFDYMPNHnZBTv3tV8MuiCC+Q6K36+ypkn/LsJC4lQSkhhkQch4Qa+MgrYBahIKcB35AYrIjyEAQ9gsCm5E2GTIDQabsJysFQcZkxxj0H2LKfkGmIMjM3KgfgbBHfQSCROwnKwZByNtJsACt8WlChnRAkA7ZkaAOqyEZ0gJB7O2LRyAjsmOIutlNjnoJhD3qL9gXyyFjk6N+CKGPegSC2DsNj0DY++IlCEI/DWMQhL0vjh0GYvE0LIWwT8PEgSDsfXEEgmRmR30PYvI0LIGkRvfFAwj9NExBkIXRfXEfYvQ0PISwT8O2A0HYoz4DQb4ZPQ0PID8sj3oO8tXuvliEPJoe9Rzkk9XTcA9yZnhfLEA+mD0Ni5Ar9gvSAUE+2j0Ni5DPdk/DAuTW9L6Yg7BHfehAkC/WR30LoY96CoL8tL0v7iD0fTECQX4Z3xd3EPa+OANBflvfF58g363vi1sIfV+cgiCPPoz6Xwh71EcgyK0Xo76BsPfFBcbhrjzYF/9l/zTcxj4NWyBH7Mmo038zFvWCsCHt1HnxaCWZg8X8ifQwxjlcSvsJaHLpsGW5v2S8vo4qyymF7+5O3wOllFJKKaWUUkoppZRSSimllPKxPwIMAPj2YtijZbi5AAAAAElFTkSuQmCC",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Wednesday, April 5, 2017