基本上我正在尝试整理一个IE11卸载脚本。 我从Microsoft找到了这个指南: IE11 Uninstall guide 但我想用Powershell和DISM代替它,因为pkgmgr已被删除。
我把以下脚本放在一起:
# Get list of IE11 related components to remove
$filenames = Get-ChildItem -Path $env:windir\servicing\Packages | Where-Object { $_.Name -clike "Microsoft-Windows-InternetExplorer-*11.*.mum" }
# Use DISM to remove all the components found above
foreach ($filename in $filenames)
{
Dism.exe /Online /Remove-Package /Packagepath:($filename.FullName) /quiet /norestart
}
我的问题是DISM命令会失败,因为/ Packagepath:参数无法读取路径。上面的代码将解析路径:.... / Packagepath:C:\ Windows ....在":"之间给我一个空格。和路径。
有什么方法可以避开那个空间,或者删除那个空间?
感谢。
答案 0 :(得分:0)
所以这是删除了前导空格的脚本。现在我只需要让DISM玩得很好:
# Get list of IE11 related components to remove
$filenames = Get-ChildItem -Path $env:windir\servicing\Packages | Where-Object { $_.Name -clike "Microsoft-Windows-InternetExplorer-*11.*" }
# Use DISM to remove all the components found above
foreach ($filename in $filenames)
{
$FullFilePath=$filename.Fullname
Dism.exe "/Online /Remove-Package /Packagename:$FullFilePath /quiet /norestart"
答案 1 :(得分:0)
你的问题是Powershell将/Packagepath:($filename.FullName)
解释为两个独立的参数,第一个是固定字符串/Packagepath:
,第二个是评估$filename.FullName
的管道。插入空格以分隔参数。
解决方案是通过将其括在引号中并使用$(...)
来评估子表达式来告诉Powershell您有一个字符串表达式。
PS C:\> $a = 'x'
PS C:\> cmd /c echo /abc:$a
/abc:x
PS C:\> cmd /c echo /abc:($a)
/abc: x
PS C:\> cmd /c echo "/abc:$($a)"
第一个echo
类似于您找到的解决方案:您有一个参数,Powershell将其解释为一个字符串。第二个用字符串/abc:
后跟表达式来说明问题。最后一个字符串使用引号明确显示,$(...)
可以包含任何表达式。