使用带有register-scheduledjob的invoke-command并传递参数:nested -argumentlist?

时间:2018-03-20 11:46:40

标签: powershell remote-server

我尝试编写一个作业的脚本,该作业将在远程计算机上创建一个新用户,我可以 通过远程PowerShell会话进行访问。这是我提出的一部分(我可能没有展示所有变量的声明,但请假设它们已经完成!):

$startTime=get-date
$psoption=new-pssessionoption -skiprevocationcheck
$cusName = $UserCredentials.GetNetworkCredential().username
$cusPassPlain = $UserCredentials.GetNetworkCredential().password
$cusPass = ConvertTo-SecureString "$cusPassPlain" -AsPlainText -Force
$endTime=$startTime.addhours($ExpiresInHours)
$guid=new-guid
$jobTrigger=new-jobTrigger -once -at $startTime

register-scheduledjob -name "$guid" -trigger $jobTrigger -scriptblock { invoke-command -sessionoption $args[0] -computername $args[1] -credential $args[2] -usessl -scriptblock { new-localuser -AccountExpires $args[0] -PasswordNeverExpires -UserMayNotChangePassword -Password $args[1] -description "Management Account: do not modify" -name $args[2]} -argumentlist $endTime,$cusPass,$cusName } -argumentlist $psoption,$managementURL,userCreds

作业已正确注册,但卡在"运行"州。我已经尝试了几种不同的代码/变量组合,并且我假设invoke-command scriptblock的参数列表没有传递给new-localuser命令。

这种方式对我来说很有意义,因为我的变量不属于那个部分,但我不知道如何将它们放入invoke-command中!可能吗?或者我应该使用另一种方法吗?

感谢您抽出宝贵时间!

[编辑]

我认为定义一个包含new-localuser命令的scriptblock对象将是我正在寻找的答案,但到目前为止我还没有想出一些有用的东西。我试过了

$invokeBlock = [scriptblock]::Create("new-localuser -AccountExpires $endTime -PasswordNeverExpires -UserMayNotChangePassword -Password $cusPass -description 'Management Account: do not modify' -name $cusName")
register-scheduledjob -name "remote_azure_$vmName_$guid" -trigger $jobTrigger -scriptblock { invoke-command -sessionoption $args[0] -computername $args[1] -credential $args[2] -usessl -scriptblock $args[3]} -argumentlist $psoption,$managementURL,$userCreds,$invokeBlock

但似乎我无法将安全字符串传递给scriptblock :(

1 个答案:

答案 0 :(得分:0)

对于我关于嵌套脚本块的问题,这不是一个严格的答案,但通过构建一个与register_scheduledjob一起使用的脚本块来解决我的问题,该块调用了一个单独的脚本来执行其他操作。