PowerShell - Lambda funkce nevykonává

hlasů
2

Tato funkce lambda provádí podle očekávání:

$WriteServerName = {

param($server)

Write-Host $server

}

$server = servername

$WriteServerName.invoke($server)

servername

Nicméně, s použitím stejné syntaxe, následující skript výzvu k zadání pověření a poté ukončí do příkazového řádku (běh takto:. \ ScriptName.ps1 -ConfigFile Chef.config), což znamená, že funkce lambda nejsou řádně provádění (pro testování každý měl jen výstup název serveru).

Proč bývalý funkce lambda vrátí název serveru, ale ty ve skriptu ne?

Param(

$ConfigFile

)

Function Main {

#Pre-reqs: get credential, load config from file, and define lambda functions.

$jobs = @()
$Credential = Get-Credential
$Username = $Credential.username
$ConvertedPassword = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Credential.password)
$Password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($ConvertedPassword)
$Config = Get-Content $ConfigFile -Raw | Out-String | Invoke-Expression

#Define lambda functions

$BootStrap = {

    param($Server)     

    write-host $server

}

$RunChefClient = {
param($Server)     

    write-host $server

}

$SetEnvironment = {

    param($Server)     

    write-host $server

}    

#Create bootstrap job for each server and pass lambda functions to Scriptblock for execution.

if(($Username -ne $null) -and ($Password -ne $null))
{
ForEach($HashTable in $Config)    

    {

        $Server = $HashTable.Server
        $Roles = $HashTable.Roles
        $Tags = $HashTable.Tags
        $Environment = $HashTable.Environment       

        $ScriptBlock = {

            param ($Server,$BootStrap,$RunChefClient,$SetEnvironment)              

                $BootStrap.invoke($Server)

                $RunChefClient.invoke($Server)  

                $SetEnvironment.invoke($Server)                             

        } 

        $Jobs += Start-Job -ScriptBlock $ScriptBlock -ArgumentList @($Server,$BootStrap,$RunChefClient,$SetEnvironment)
    }

}

else {Write-Host Username or password is missing, exiting... -ForegroundColor Red; exit}

}

Main
Položena 19/06/2017 v 20:47
uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Bez zkoušek, budu pokračovat a že je to proto, že jste uvedení své scriptblock popravy v PowerShell zaměstnanost a pak nedělá nic s nimi. Při spuštění úlohy, spustí novou instanci PowerShell a spustí kód, který ji poskytne spolu s parametry, které ji poskytují. Jakmile se dokončí, dokončený PSRemotingJobobjekt tam sedí a nedělá nic, dokud se skutečně něco udělat s ním.

V kódu, všechny úlohy začnete jsou přiřazeny k proměnné $ Jobs. Můžete také získat všechny své provozní úlohy s Get-Job:

Get-Job -State Running

Chcete-li mít některý z dat vrácených z vašich pracovních míst, budete muset použít Receive-Job

# Either
$Jobs | Receive-Job
# Or
Get-Job -State Running | Receive-Job
Odpovězeno 20/06/2017 v 01:01
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more