3

別のスクリプトを開始してパラメーターを渡す PowerShell スクリプトを入手しました。Start-Job2 番目のスクリプトが終了するまで待ちたくないので、これを行います。

スクリプト A:

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

スクリプト B:

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

$VolumeDriveLetter処理される単なるドライブ文字、つまり「C:」です。

残念ながら、変数によるパラメーターの受け渡しは機能しません$VolumeDriveLetterが、期待される値がありますが、入力は正しく機能します。

作品:

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

動作しません

$VolumeDriveLetter = "C:"

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

編集: ScriptB は渡された変数を空として出力します

変数を渡して機能させるには何が欠けていますか?

4

1 に答える 1

4

プレフィックスを使用してusing、スクリプト ブロック内の値にアクセスできます。

$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 }}

または、パラメーターを使用して、-ArgumentListパラメーターをスクリプトブロックに渡します。

start-job -name EnableAutoUnlock -scriptblock { 
    Param($VolumeDriveLetter) 
    Write-Host $VolumeDriveLetter 
} -ArgumentList $VolumeDriveLetter
于 2016-11-08T10:35:50.203 に答える