2014-12-12 4 views
0

기본적으로 IE11 제거 스크립트를 작성하려고합니다. Microsoft에서이 가이드를 찾았습니다 : IE11 Uninstall guide 하지만 Powershell 및 DISM 대신 pkgmgr이 사용되지 않으므로 대신 사용하고 싶습니다.Powershell 변수를 확장 할 때 선행 공간을 피하는 방법

내가 함께 아래의 스크립트를 넣어 가지고 : 매개 변수의 경로를 읽을 실패

# 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 
} 

내 문제는/packagePath를이 때문에 DISM 명령이 실패 할 것입니다. 위의 코드는 경로를 ..../Packagepath : C : \ Windows ....로 해결하여 ":"과 경로 사이에 공백을 둡니다.

공간을 피하거나 공간을 제거하는 방법이 있습니까?

감사합니다.

답변

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" 
0

여기에 귀하의 문제는 파워 쉘은 첫 번째가 고정 된 문자열 /Packagepath:이고, 두 번째는 $filename.FullName을 평가하는 파이프 라인이다, /Packagepath:($filename.FullName) 두 개의 별도의 인수를 해석하는 것입니다 . 공백은 인수를 구분하기 위해 삽입됩니다.

해결 방법 Powershell에게 인용 부호로 묶고 하위 표현식을 평가하기 위해 $(...)을 사용하여 단일 문자열식이 있음을 알리는 것입니다. 당신은 하나의 인자를 가지고 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

작동 당신이 볼 수있는 솔루션과 유사하다. 두 번째는 문자열 /abc: 다음에 표현식이 붙은 문제를 보여줍니다. 마지막 하나는 따옴표로 명시된 단일 문자열이고 $(...)은 임의의 표현을 포함 할 수 있습니다.

관련 문제