Powershell将论证传递给后台工作

时间:2013-05-16 18:27:20

标签: powershell start-job

我有一个包含以下参数的脚本:

[Parameter(ParameterSetName="FromPipe", Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [string[]]$ComputerName,
[Parameter(ParameterSetName="FromPipe", Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [string[]]$AppName,
[Parameter(ParameterSetName="FromPipe", Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [string[]]$key,
[Parameter(ParameterSetName="FromPipe", Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [string[]]$setting,

我想在后台运行这个脚本,但我一直在努力获取参数。这个脚本是一个模块。我可以使用

从命令行成功运行它
start-job -InitializationScript {Import-Module ConfigureServer.psm1} -ScriptBlock {Get-ConfigureServerInput} -ArgumentList "google.com","Test1","Test2","Test3","-Verbose"

但这是我的脚本中用于启动作业的实际代码:

$JobObj = New-Object PSObject
$JobObj | Add-Member -type NoteProperty -name ComputerName -value $($obj.ComputerName)
$JobObj | Add-Member -type NoteProperty -name AppName -value $($obj.AppName)
$JobObj | Add-Member -type NoteProperty -name key -value $($obj.key)
$JobObj | Add-Member -type NoteProperty -name setting -value $($obj.setting)
$JobObj | Add-Member -type NoteProperty -name Verbose -value $true
Write-Verbose "Starting job: -Name $JobName -FilePath Job-ConfigureServer.ps1 -ArgumentList $($JobObj)"
#Start-Job -Name $JobName -InitializationScript {import-module ConfigureServer.psm1} -ScriptBlock {Get-ConfigureServerInput} -ArgumentList $($JobObj) | Out-Null
#Start-Job -Name $JobName -InitializationScript {import-module ConfigureServer.psm1} -ScriptBlock {Get-ConfigureServerInput @ARGS} -ArgumentList $($JobObj) | Out-Null
Start-Job -Name $JobName -InitializationScript {import-module ConfigureServer.psm1} -ScriptBlock {Get-ConfigureServerInput -ComputerName $($obj.ComputerName) -AppName $($obj.AppName) -key $($obj.key) -setting $($obj.setting) -Verbose}
Start-Job -FilePath TestJob.ps1 -ArgumentList $($obj)

未注释的Start-Job只运行一个转储$ args的测试脚本。

"Arguments: $($args.count)"
$args

结果是:

PS E:\Powershell\ConfigureServer> get-job | receive-job
Arguments: 1


ComputerName : server.bogus.com
AppName      : iis
key          : default site
setting      : cert
RunspaceId   : 5c72401e-3cb1-4f44-b0e1-c370c8a3c200

Arguments: 1
ComputerName : fbravo
AppName      : Net
key          : IP
setting      : 10.11.12.13
RunspaceId   : 80b2095c-6129-4d7c-8e89-528cf93ce975

Arguments: 1
ComputerName : tfs.bogus.com
AppName      : edamame
key          : DLL
setting      : edamame.dll
RunspaceId   : f7727c69-121c-4a59-b646-a4f0eac53e7d

Arguments: 1
ComputerName : falpha
AppName      : IIS
key          : IP
setting      : 1.1.1.1
RunspaceId   : cd182911-d4a6-4bfd-ba4b-103ebaab20a3

Arguments: 1
ComputerName : web.bogus.com
AppName      : Net
key          : IP
setting      : 192.168.100.102
RunspaceId   : 03d6130c-46d1-483d-833c-781720fcc0cf

如何格式化我的Start-Job以成功传递参数? 我已尝试使用-FilePath的各种格式的Start-Job,列出参数而不是传递对象等。

它们最终都被阻止等待用户输入提示输入参数。

0 个答案:

没有答案