Ek is nuut met PowerShell scripting. Ek het 'n skrip wat twee funksies insluit en ek het hierdie twee funksies in 'n enkele funksie geplaas sodat dit parallel sal werk wanneer ek dit uitvoer. Nou wil ek die hele script as een taak laat loop sodat ek die script op verskeie dopgehou kan laat loop en die uitvoer sonder verwarring kan sien.

My kode:

[CmdletBinding()]
param (
    [Parameter(Mandatory = $true)]
    [String]$currentPath
)
Function tfinit { Do something }

function changes { Do something}

function runjobs {
    Param ($path)
    set-location $path
    #remove blank workspace and space from the list
    $workspace = terraform workspace list
    $workspaces = @()
    $workspace | ForEach-Object {
        $a = $_ -replace "\*", ""
        $a = $a -replace ' ', ''
        $workspaces += $a
    }
    ### Do init
    tfinit -path $path

    ##### Do plan job
    foreach ($workspace in $workspaces) {
        if ($workspace -ne "") {
            changes -workspace $workspace -path $path 
        }
    }
    ### Get folder inside the folder to run
    $list = Get-ChildItem -Directory
    foreach ($folder in $list) {
        set-location $folder.fullname
        runjobs -path "$folder.fullname"
    }
}

runjobs -path $currentPath

Is daar in elk geval wat ek hierdie hele skrif as een taak kan laat loop? Dit sal baie nuttig wees as iemand my kan help. Dankie

answer

Kan nog nie kommentaar lewer nie :( om dit duidelik te maak, jy het 2 verskillende vermoëns gehad wat jy moes uitvoer, jy het dan elkeen as 'n funksie in jou script geplaas sodat hulle nie afsonderlik uitgevoer hoef te word nie? As dit die geval is cool, is dit nie parallel gedoen, aangesien elke deel steeds opeenvolgend uitgevoer word, vereis egter net een skrif en een uitvoering.

So jou script loop op 'n $currentpath, wat gestel is hoe? En loop dan die runjobs-funksie wat homself aan die einde noem, gebaseer op die vind van die gidse van die huidige pad. Alle veranderlikes is by verstek privaat vir 'n funksie. Dit beteken dat hulle sal ophou bestaan ​​sodra jy die funksie verlaat. Selfs as die funksie homself in hierdie geval kan noem (nooit persoonlik probeer het nie), sal jy die eerste gids-eienskapwaarde van elke subgids afstap. Maar dit dek nie alle gidse in die huidige pad wat oorspronklik gekies is nie. As jy alle gidse onder die huidige pad wil hê, sal jy die -recurse parameter met die -directory parameter moet gebruik.

Ten slotte sou ek die get-childitem en die foreach lus hieronder uit die funksie skuif, sowel as die param en stel ligging. Verwyder die runjobs -path $currentpath en plaas net die vasgestelde ligginglyn gevolg deur die get-childitem en vir geassosieerde foreach lus. Dit sal alle subgidse van die huidige pad dek.

Nuwe bydraer
Aalom is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.