0 Pluspunkte 0 Minuspunkte

Ich habe ein Array an Servernamen und für jeden Server rufe ich einen ScriptBlock mit Invoke-command auf.

$servers = @(
    "server1",
    "server2"
)

$servers | foreach-object {
    $server = $_
    Invoke-Command -ComputerName $server -ScriptBlock { 
        $licenseStatus = & cscript //nologo $env:SystemRoot\System32\slmgr.vbs /xpr
        Write-Output "$($server) - $($licenseStatus)"
    }
}

Wie kann ich die Variable $server innerhalb des CodeBlock verwenden? Die Ausgabe ist immer leer.

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Du musst die Variable explizit mit -ArgumentList übergeben und sie innerhalb des ScriptBlocks als Parameter definieren.

$servers = @(
    "server1",
    "server2"
)

$servers | ForEach-Object {

    $server = $_

    Invoke-Command -ComputerName $server -ScriptBlock { 

        param ($srv)  # Definiere Parameter für den Remote-Block

        $licenseStatus = & cscript //nologo $env:SystemRoot\System32\slmgr.vbs /xpr
        Write-Output "$srv - $licenseStatus"

    } -ArgumentList $server  # Übergibt die Variable an den ScriptBlock

}
von (1.3k Punkte)