PSSessionStateBroken与计划任务中的start-job -credential

时间:2013-03-14 21:44:14

标签: powershell background-process powershell-v3.0 start-job

以下几行在Powershell提示符下正常工作,但从计划任务失败。

$pass = gc C:\secrets\shhh.txt | convertTo-secureString
$Cred = new-object -typeName System.management.automation.psCredential -argumentlist "domain\domainUser",$pass

$path = "\\server\share\folder"
$j = start-job {gci -path $args[0]} -cred $Cred -argumentList $path | wait-job | receive-job

$body = $j | out-string
$error | out-file C:\temp\err.txt
send-mailMessage -to me@domain.tld -from server@domain.tld -subject halp -smtpserver mailserver.domain.tld -body $body

在c:\ temp \ err.txt中,Windows 2008R2计划任务留下了面包屑:

[localhost] The background process exited abnormally.
    + CategoryInfo          : OpenError: (localhost:String) [], PSRemotingTransportException
    + FullyQualifiedErrorId : 2101,PSSessionStateBroken

...将我们带到this Microsoft bug report。该报告提到了使用localhost环回远程处理的解决方法,听起来有点脏。我应该去那里吗?

有更好的解决方案吗?也许使用* session cmdlet或invoke-command之一?计划任务的Start in值已设置,但后台进程可能会以某种不好的方式使用某些变量,例如so

没有运气用–version 2-command "& {bigKlugeyScriptblock}"语法调用powershell.exe。

编辑:我正在尝试避免创建新的域帐户来运行任务。该任务无法从domainUser$cred运行,因为该帐户不应具有localhost的权限。

1 个答案:

答案 0 :(得分:2)

正如一些可能的解决方法:

  1. 在计划任务本身上放置备用凭据
  2. 使用runas命令以不同的用户身份启动powershell.exe
  3. 使用net use / user参数验证对网络路径的访问权限

    [/USER:[dotted domain name\]username]
    [/USER:[username@dotted domain name]