编写用于安装软件的 powershell 脚本时收到错误消息

编写用于安装软件的 powershell 脚本时收到错误消息

下午好,

我正在尝试编写一个脚本来安装软件。脚本如下:

$ComputerName = Read-Host -Prompt "Please Enter The Computer Name"
$Software = Read-Host -Prompt "Please Enter The Software Name"
switch ($Software)
{
    Java {$Software = "C:\Script\Java.msi"}
    Atom {$Software = "C:\Script\AtomSetup.exe"}
    Notepad {$Software = "C:\Script\notepad.exe"}
    Default {Throw No Software Match found for $software}
}
$session = New-PSSession -ComputerName $ComputerName
Copy-Item -Path $Software -Destination C:\Script -Recurse -Verbose -ToSession $session
$session | Remove-PSSession
Invoke-Command -ComputerName $ComputerName -Credential (Get-Credential) -ScriptBlock {start-process -Filepath $software -ArgumentList '/silent' -wait 
Remove-Item -Path $software -Force
}

我收到以下错误消息。

无法验证参数“FilePath”上的参数。该参数为 null 或为空。请提供一个非 null 或为空的参数,然后重试该命令。+ CategoryInfo : InvalidData: (:) [Start-Process],ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.StartProcessCommand + PSComputerName : testPC

无法将参数绑定到参数“Path”,因为它为空。+ CategoryInfo : InvalidData: (:) [Remove-Item], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.RemoveItemCommand + PSComputerName : testPC

任何帮助,将不胜感激

答案1

阅读并关注调用命令 文档

-ArgumentList

提供命令中局部变量的值。在运行命令之前,命令中的变量将被这些值替换 在远程计算机上。以逗号分隔的列表形式输入值。值按列出的顺序与变量相关联。参数列表参数

中的值参数列表参数可以是实际值,例如 1024,也可以是局部变量的引用,例如$max

要在命令中使用局部变量,请使用以下命令格式:

{param($<name1>[, $<name2>]...) <command-with-local-variables>} -ArgumentList <value> -or- <local-variable>

关键字param列出了命令中使用的局部变量。参数列表按照列出的顺序提供变量的值。

使用

Invoke-Command -ComputerName $ComputerName -Credential (Get-Credential) `
    -ScriptBlock {
        param($Software)
        Start-Process -Filepath $software -ArgumentList '/silent' -wait 
        Remove-Item -Path $software -Force
    } -ArgumentList $Software

相关内容