Я получил этот скрипт отсюда, и он работает для удаления приложения, но только когда -match
используется вместо -like
в первых двух строках, даже если я использую все имя приложения.Почему-как не работает, но -match делает?
Имя приложения включает в себя версию, поэтому я хотел бы подстановить имя в скрипте для поддержки «MyApp 2.4.1» и т. Д. Спасибо!
$uninstall32 = gci "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" |
foreach { gp $_.PSPath } | ? { $_ -like "MyApp*" } | select UninstallString
$uninstall64 = gci "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" |
foreach { gp $_.PSPath } | ? { $_ -like "MyApp*" } | select UninstallString
if ($uninstall64) {
$uninstall64 = $uninstall64.UninstallString -Replace "msiexec.exe","" -Replace "/I","" -Replace "/X",""
$uninstall64 = $uninstall64.Trim()
Write "Uninstalling..."
start-process "msiexec.exe" -arg "/X $uninstall64 /qb" -Wait
}
if ($uninstall32) {
$uninstall32 = $uninstall32.UninstallString -Replace "msiexec.exe","" -Replace "/I","" -Replace "/X",""
$uninstall32 = $uninstall32.Trim()
Write "Uninstalling..."
start-process "msiexec.exe" -arg "/X $uninstall32 /qb" -Wait
}
Если '-match' работал, но' -like' не только разница в том, что если фактическая строка была «1MyAPP 2.3.4» или «MYAPP 2.3.4» '-match' бы найти его, так как матч только заботится, если строка присутствует где угодно, но как не будет, так как она ожидает, что первый символ будет М и так далее. Интересно, есть ли какие-либо символы до M. Если вы изменили предложение на '? {$ _ -match"^MyApp "}', он все еще работает? – Matt
Я думаю, что ты прав. Я не вижу никаких ведущих символов в свойстве name, но я добавил «*» и в начало, и это сработало. Не стесняйтесь представить в качестве ответа. Благодаря! – NSouth