Chapters/just-enough-administration-primer/CreateRole.ps1
#Requires -version 5.1 <# SYNTAX New-PSRoleCapabilityFile [-Path] <String> [-AliasDefinitions <IDictionary[]>] [-AssembliesToLoad <String[]>] [-Author <String>] [-CompanyName <String>] [-Copyright <String>] [-Description <String>] [-EnvironmentVariables <IDictionary>] [-FormatsToProcess <String[]>] [-FunctionDefinitions <IDictionary[]>] [-Guid <Guid>] [-ModulesToImport <Object[]>] [-ScriptsToProcess <String[]>] [-TypesToProcess <String[]>] [-VariableDefinitions <Object>] [-VisibleAliases <String[]>] [-VisibleCmdlets <Object[]>] [-VisibleExternalCommands <String[]>] [-VisibleFunctions <Object[]>] [-VisibleProviders <String[]>] [<CommonParameters>] #> $params = @{ Path = ".\ShareAdmins.psrc" Description = "Share Admin" VisibleFunctions = @("Get-SMBShare", "Get-SMBShareAccess", "Get-ShareSize") VisibleAliases = "gcim" ModulesToImport = "ShareAdmin" VisibleCmdlets = @{Name = "Get-CimInstance"; Parameters = @{ Name = 'classname'; ValidateSet = 'win32_share' }, @{Name = "filter"} } } New-PSRoleCapabilityFile @params #region copy to module # Create a folder for the module $modulename = "ShareAdmin" #the path could also be a directory in $env:psmodulepath $modulePath = Join-Path -path . -ChildPath $modulename New-Item -ItemType Directory -Path $modulePath <# Create an empty script module and module manifest. At least one file in the module folder must have the same name as the folder itself. #> $path = (Join-Path -path $modulePath -ChildPath "$modulename.psm1") New-Item -ItemType File -Path $path $manifest = (Join-Path -path $modulePath -ChildPath "$modulename.psd1") New-ModuleManifest -Path $manifest -RootModule "$modulename.psm1" # Create the RoleCapabilities folder and copy in the PSRC file $rcFolder = Join-Path -path $modulePath -ChildPath "RoleCapabilities" New-Item -ItemType Directory $rcFolder Copy-Item -Path .\ShareAdmins.psrc -Destination $rcFolder -PassThru -Force #endregion |