InvalidOperation:(:) [Start-Process],InvalidOperationException

时间:2019-05-29 08:54:03

标签: powershell powershell-v4.0

我遇到以下错误:

  

由于错误而无法运行此命令:系统找不到指定的文件。       + CategoryInfo:InvalidOperation :( :) [开始进程],InvalidOperationException       + FullyQualifiedErrorId:InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand       + PSComputerName:XXXXXX.yyy.com

以下是代码段:

if (($ToolsStatus -eq 'toolsOk' -OR $ToolsStatus -eq 'toolsOld') -AND $VMVSSStatus -eq $null -AND $OperatingSystem -match "64-bit" ) {
            try{
                Copy-Item -Path ".\64bit\$ToolsVersion.exe" -Destination "\\$FQDN\c$\"  -Container -Recurse -Force -ErrorAction Stop
                "File $ToolsVersion.exe copied on $vmName" | Do-Log
                try {
                    Invoke-Command -ComputerName $FQDN -ScriptBlock { 
                        Start-Process "C:\$ToolsVersion.exe" -ArgumentList '/s /v "/qn reboot=r ADDLOCAL=all"' -Wait 
                        Start-Process "C:\$ToolsVersion.exe" -ArgumentList '/s /v "/qn reboot=r REMOVE=VSS"' -Wait
                        Start-Process "C:\$ToolsVersion.exe" -ArgumentList '/s /v "/qn reboot=r ADDLOCAL=VSS"' -Wait 
                        "Installation completed on $vmName" | Do-Log
                        taskkill /IM vmtoolsd.exe /F
                        "VMtools process killed on $vmName" | Do-Log
                        Start-Service -Name VMTools
                        "VMware Tools service was started on $vmName" | Do-Log
                    } 
                }
                catch [System.Management.Automation.RuntimeException]#PSRemotingTransportException
                {
                     "Unable to install on $vmName. Following error was encountered:" +$_.Exception.GetType().FullName | Do-Log
                }

请帮助。

1 个答案:

答案 0 :(得分:1)

我猜想<?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml"> <head/> <body> <p>This is an example.</p> <pre>Text before<span class="tabspan"> </span>text in the middle<span class="tabspan"> </span>text after</pre> </body> </html> 变量在<xsl:variable name="BodyText"> <span class="tabspan"> <xsl:text>&#9;</xsl:text> </span> </xsl:variable> <xsl:template match="xhtml:pre"> <xsl:copy> <xsl:call-template name="replace"> <xsl:with-param name="text" select="."/> <xsl:with-param name="searchString" select="'&#9;'"/> <xsl:with-param name="replacement" select="$BodyText"/> </xsl:call-template> </xsl:copy> </xsl:template> <xsl:template name="replace"> <xsl:param name="text"/> <xsl:param name="searchString"/> <xsl:param name="replacement"/> <xsl:choose> <xsl:when test="contains($text, $searchString)"> <xsl:value-of select="substring-before($text, $searchString)"/> <xsl:copy-of select="$replacement"/> <xsl:call-template name="replace"> <xsl:with-param name="text" select="substring-after($text, $searchString)"/> <xsl:with-param name="searchString" select="$searchString"/> <xsl:with-param name="replacement" select="$replacement"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$text"/> </xsl:otherwise> </xsl:choose> </xsl:template> 的范围内是未定义的,因为该范围是在远程计算机上执行的。

尝试:

$ToolsVersion

相反。

来自about_Remote_Variables

  

使用局部变量

     

您还可以在远程命令中使用局部变量,但是必须指出该变量是在本地会话中定义的。

     

从Windows PowerShell 3.0开始,可以使用“使用范围”修饰符在远程命令中标识本地变量。 ...

更新1:

要从远程检索日志,您必须将代码更改为:

Invoke-Command

此处,数组Start-Process "C:\$Using:ToolsVersion.exe" -ArgumentList '/s /v "/qn reboot=r ADDLOCAL=all"' -Wait 将通过网络序列化。在您的计算机上,它会反序列化,并且数组的每个条目都会发送到您的本地管道。

希望有帮助。