我编写了一个需要连接到不在域上的多个远程服务器的脚本。最终目标是使用Invoke-Command在远程服务器上创建计划任务。
$name = $server."Name";
$cred = Get-Credential "$name\admin";
它会导致提示打开,我输入管理员密码。但是当我打电话时:
Invoke-Command -ComputerName $addr -Script $Script1 -Credential $cred
终端提示输入UserId。
如果再次输入用户名,则会出现此错误:
Cannot validate argument on parameter 'Password'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again. + CategoryInfo : InvalidData: (:) [Register-ScheduledTask], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Register-ScheduledTask + PSComputerName : 10.110.0.25
我正在运行的脚本是:
$Script1 = {Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force -Confirm:$False; $A=New-ScheduledTaskAction -Execute "powershell.exe" -argument "-file C:\PSWU\Shared\ps.ps1"; $p=New-ScheduledTaskPrincipal -RunLevel Highest ; $C=New-ScheduledTask -Action $A -Principal $p ; Register-ScheduledTask T1 -InputObject $C -Password $SecurePassword;}
答案 0 :(得分:0)
这里似乎问题是,$Script
这里是一个ScriptBlock,它在自己的范围内。因此它对$SecurePassword
变量没有任何价值。
在脚本块中使用Param($SecurePassword)
并传递原$SecurePassword
个-ArgumentList
参数[{1}}
这是一个例子。
Invoke-Command
您在ScriptBlock中访问的任何变量都应该在ScriptBlock的一侧定义,或者作为$Script = {param($r);"r is $r"}
Invoke-Command -ScriptBlock $Script -ArgumentList 'Value for r'
的参数传递
如果在本地运行的脚本中使用脚本块,则可以使用变量作用域。
Invoke-Command
这里也是:https://technet.microsoft.com/en-us/library/hh847893.aspx
的问候,
Kvprasoon