2016-11-08 2 views
1

Ich habe ein PowerShell-Skript, das ein anderes Skript startet und Parameter an es übergibt. Ich tue dies mit Start-Job, wie ich will nicht warten, bis das zweite Skript beendet ist:Start-Job Skriptblock Übergabe der Variablen

Scripta:

start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "\\Path\To\Script\EnableAutoUnlock.ps1" $VolumeDriveLetter }} 

ScriptB:

[CmdletBinding()] 
Param (
    [Parameter(Position=0)] 
    [string]$drive 
) 
<do stuff with $drive here> 

$VolumeDriveLetter ist nur ein Laufwerksbuchstabe, der verarbeitet wird, dh "C:"

Leider funktioniert die Übergabe des Parameters per Variable nicht, obwohl $VolumeDriveLetter den erwarteten Wert hat, aber die Eingabe funktioniert nicht korrekt.

Works:

start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "\\Path\To\Script\EnableAutoUnlock.ps1" C: }} 

nicht

$VolumeDriveLetter = "C:" 

start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "\\Path\To\Script\EnableAutoUnlock.ps1" $VolumeDriveLetter }} 

EDIT funktionierts: ScriptB Ausgänge der übergebene Variable als leer

Was bin ich vorbei der Variable zu erhalten arbeiten?

Antwort

1

Sie können den using Präfix den Wert innerhalb eines Skript zuzugreifen:

$VolumeDriveLetter = "C:" 

start-job -name EnableAutoUnlock -scriptblock {Invoke-Command -script { C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "\\Path\To\Script\EnableAutoUnlock.ps1" $using:VolumeDriveLetter }} 

Oder Sie verwenden die -ArgumentList Parameter und übergeben Sie die Parameter auf den Skript:

start-job -name EnableAutoUnlock -scriptblock { 
    Param($VolumeDriveLetter) 
    Write-Host $VolumeDriveLetter 
} -ArgumentList $VolumeDriveLetter 
+0

Vielen Dank für Ihre Antwort, aber Ich habe es gerade ausprobiert und es funktioniert leider nicht (wie zuvor, der von scriptB empfangene Parameter ist einfach leer) –

+0

Vielen Dank, ich habe die bearbeitete Antwort verwendet und es hat perfekt funktioniert –

Verwandte Themen