PowerShell向ArgumentList传变量失败:TeamViewer部署别名异常
解决方案
问题根源有两点:
- 单引号包裹的字符串中,PowerShell不会解析变量,只会原样输出
$serialnumber字符串 ASSIGNMENTOPTIONS参数内的引号转义不符合PowerShell规则
修正后的代码可以用两种方式实现:
方式一:双引号嵌套双引号(连续双引号转义)
$serialnumber = (Get-CimInstance -ClassName Win32_BIOS -Property SerialNumber).SerialNumber $tvparams = '/i', "ASSIGNMENTOPTIONS=""--alias $serialnumber""" Start-Process 'msiexec.exe' -ArgumentList $tvparams
方式二:反引号转义内部双引号
$serialnumber = (Get-CimInstance -ClassName Win32_BIOS -Property SerialNumber).SerialNumber $tvparams = '/i', "ASSIGNMENTOPTIONS=`"--alias $serialnumber`"" Start-Process 'msiexec.exe' -ArgumentList $tvparams
补充优化建议
如果你的TeamViewer MSI安装包有明确路径,建议把路径也加入参数列表,同时加上-Wait参数让PowerShell等待安装完成:
$tvInstaller = "C:\Deploy\TeamViewer_Host.msi" $serialnumber = (Get-CimInstance -ClassName Win32_BIOS -Property SerialNumber).SerialNumber $tvparams = '/i', $tvInstaller, "ASSIGNMENTOPTIONS=""--alias $serialnumber""" Start-Process 'msiexec.exe' -ArgumentList $tvparams -Wait
内容的提问来源于stack exchange,提问作者Tolsn
相关产品推荐
相关产品推荐

