Get-Credentials密码为“空”

问题描述:

我写过一个脚本,需要连接到不在域中的多个远程服务器。最终目标是使用Invoke-Command在远程服务器上创建计划任务。Get-Credentials密码为“空”

$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;} 
+1

你的错误来自于'$ Script1'一些脚本命令,但没有表现出来。 – PetSerAl

+0

我更新了帖子以包含脚本。我相信这个错误来自New-ScheduledTaskPronciple命令。 – Lambda42

在这里看来问题,$Script这里是一个脚本块并在其范围内。所以它对$SecurePassword变量没有任何价值。

使用Param($SecurePassword)脚本块内,并通过的Invoke-Command

原始$SecurePassword小瓶-ArgumentList参数下面是一个例子。

$Script = {param($r);"r is $r"} 
Invoke-Command -ScriptBlock $Script -ArgumentList 'Value for r' 

无论你是一个脚本块内访问变量或者应在一侧被定义的脚本块或如果你是在本地运行的脚本中使用脚本块应该作为论据Invoke-Command

传递,你可以使用变量作用域。在Get-Help about_Script_Blocks

这里也

更多信息:https://technet.microsoft.com/en-us/library/hh847893.aspx

问候,

Kvprasoon

+0

谢谢,我正在研究param功能。 – Lambda42