我坚持USMT迁移。这是我的代码:
$scriptA = "\\PL-HVEZDAP\backup\USMTBin\scanstate.exe \\PL-HVEZDAP\backup /ue:* /ui:$name /o /i:'\\PL-HVEZDAP\backup\USMTBin\miguser.xml' /i:'\\PL-HVEZDAP\backup\USMTBin\migapp.xml' /c"
$scriptB = "\\PL-HVEZDAP\backup\USMTBin\loadstate.exe \\PL-HVEZDAP\backup /ue:* /ui:$name /i:'\\PL-HVEZDAP\backup\USMTBin\miguser.xml' /i:'\\PL-HVEZDAP\backup\USMTBin\migapp.xml' /c"
$scriptA = [scriptblock]::Create($scriptA)
$scriptB = [scriptblock]::Create($scriptB)
Invoke-Command -ComputerName $computer -scriptblock $scriptA
Invoke-Command -ComputerName $remcomputer -scriptblock $scriptB
最后一行有问题 - 我收到错误:
The term '\\PL-HVEZDAP\backup\USMTBin\loadstate.exe' is not recognized as the name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
again.
+ CategoryInfo : ObjectNotFound: (\\PL-HVEZDAP\ba...n\loadstate.exe:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
但如果我运行$ scriptb = get-process,一切都像魅力......
有人可以帮我这个吗?非常感谢。
答案 0 :(得分:0)
看起来像是一个kerberos双跳问题。使用Invoke-Command
连接到远程计算机后,您无法再使用任何隐式使用身份验证的命令(包括cmdlet,可执行文件和连接到文件共享)。
这是Kerberos设计方式的一个功能。您可以使用名为CredSSP
和Invoke-Command
的其他类型的身份验证来委派凭据,但这需要在两端进行一些设置。
通常,您可以更轻松地重新考虑存储和/或执行各个部分的位置。
由于您广泛使用文件共享,因此您可能会考虑不将Invoke-Command
用于远程计算机,而是在目标计算机上本地执行备份脚本。
执行此操作的一种方法是,仍然能够集中存储脚本,即在运行此脚本的目标计算机上创建计划任务。如果您在域中,它甚至可以通过GPO推出。
然后,您可以在希望运行该代码时启动任务。
您甚至可以使用Invoke-Command -ComputerName $remcomputer -ScriptBlock { schtasks.exe /Run /TN "My Task" }
,这样就可以了。