Skip to content

[Management.Automation.Language.ScriptRequirements] should be extended to have a useful .ToString() #234

Closed
@StartAutomating

Description

@StartAutomating

In the event that someone wants to recreate a script's requirements, the process of doing so is tedious and error prone.

Since we are already extending a lot of the types in [Management.Automation.Language], it makes sense to put this code into a ToString() ScriptMethod (and a property, .Script)

if ($requirement.RequirementPSVersion) {
    "#requires -Version $($requirement.RequirementPSVersion)"
}
if ($requirement.IsElevationRequired) {
    "#requires -RunAsAdministrator"
}
if ($requirement.RequiredModules) {
    "#requires -Module $(@(foreach ($reqModule in $requirement.RequiredModules) {
        if ($reqModule.Version -or $req.RequiredVersion -or $req.MaximumVersion) {
            '@{' + $(@(foreach ($prop in $reqModule.PSObject.Properties) {
                if (-not $prop.Value) { continue }
                if ($prop.Name -in 'Name', 'Version') {
                    "Module$($prop.Name)='$($prop.Value.ToString().Replace("'","''"))'"
                } elseif ($prop.Name -eq 'RequiredVersion') {
                    "MinimumVersion='$($prop.Value)'" 
                } else {
                    "$($prop.Name)='$($prop.Value)'" 
                }
            }) -join ';') + '}'
        } else {
            $reqModule.Name
        }
    }) -join ',')"
}
if ($requirement.RequiredAssemblies) {
    "#requires -Assembly $($requirement.RequiredAssemblies -join ',')"
}

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions