0

基本上我正在尝试组合一个 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.... 在“:”和路径之间给我一个空格。

有什么办法可以避免该空间,或者删除该空间?

谢谢。

4

2 回答 2

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"
于 2014-12-12T10:09:44.087 回答
0

您的问题是 Powershell 解释/Packagepath:($filename.FullName)为两个单独的参数,第一个是固定的 string /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:后跟一个表达式来说明您的问题。最后一个有一个用引号明确表示的字符串,并且$(...)可以包含任何表达式。

于 2014-12-12T15:01:30.350 回答