如何在 PowerShell 中使用 ADB return 代码(或结果)?
How to use ADB return code (or result) in PowerShell?
我想制作删除预装应用程序的 PowerShell 脚本,我有这些应用程序的列表。
问题是,我想先为运行某个命令制作脚本,只有当命令失败时,运行另一个命令。
比如,如果脚本无法删除应用程序,那么它将尝试禁用该应用程序。无需尝试禁用已删除的应用程序,对吧?
adb shell am force-stop <app> # force stop app
adb shell am kill <app> # kill app if not force-stopped
adb uninstall <app> # remove app
adb shell pm disable-user --user 0 <app> # disable app for user 0 if not removed
是的,有一些已经回答过的类似问题,例如 this。但这些现在不起作用。
PS > adb shell "pm uninstall com.google.android.apps.photos; echo $?"
Failure [DELETE_FAILED_INTERNAL_ERROR]
True
即使命令失败(Failure
),echo
returns True
.
这是用最新的(几分钟前刚刚下载的)ADB 和 Android 11 测试的,所以我猜我的信息('那不工作!')更多 'latest'。
那么,如何在PowerShell中使用returnADB命令的代码?
PS。如果你想要我为更多检查编写的代码,这里是:LINK
已经修改为不用echo
,还是没有成功
So, how to use return code of ADB command in PowerShell?
正确的检查方法应该是:
adb devices
if($?) {
echo "Command succedded"
} else {
echo "Command failed!"
}
此外,还有一个退出代码$LASTEXITCODE表示0,如果命令执行无任何异常;和非零值,如果命令因某些异常而失败。您可以将其用作:
if($LASTEXITCODE -eq 0) {
echo "Command succedded"
} else {
echo "Command failed!"
}
$?
和$LASTEXICODE
的区别在于前者returnsBoolean,而后者returns是Int32类型.
Even if the command failed(Failure), echo returns True.
您面临此问题的真正原因是,因为您正在尝试卸载 Google Photos 应用程序,这是一个预捆绑的系统应用程序与其他 OEM 供应商应用程序一起使用,具有最小版本。要卸载此类系统应用程序,您需要 root 权限,可以使用 --user 0
标志激活 adb pm
命令,但您需要 root access。当您购买新设备时,它已经安装为系统应用程序并且可以更新。当您尝试卸载它时,它的更新将被卸载并且系统恢复最小的预捆绑版本而不是完全卸载。这就是您收到 Failure [DELETE_FAILED_INTERNAL_ERROR]
消息并随后收到 True
的原因,它应该是 False
但命令不会抛出它。奇怪。
我想制作删除预装应用程序的 PowerShell 脚本,我有这些应用程序的列表。
问题是,我想先为运行某个命令制作脚本,只有当命令失败时,运行另一个命令。
比如,如果脚本无法删除应用程序,那么它将尝试禁用该应用程序。无需尝试禁用已删除的应用程序,对吧?
adb shell am force-stop <app> # force stop app
adb shell am kill <app> # kill app if not force-stopped
adb uninstall <app> # remove app
adb shell pm disable-user --user 0 <app> # disable app for user 0 if not removed
是的,有一些已经回答过的类似问题,例如 this。但这些现在不起作用。
PS > adb shell "pm uninstall com.google.android.apps.photos; echo $?"
Failure [DELETE_FAILED_INTERNAL_ERROR]
True
即使命令失败(Failure
),echo
returns True
.
这是用最新的(几分钟前刚刚下载的)ADB 和 Android 11 测试的,所以我猜我的信息('那不工作!')更多 'latest'。
那么,如何在PowerShell中使用returnADB命令的代码?
PS。如果你想要我为更多检查编写的代码,这里是:LINK
已经修改为不用echo
,还是没有成功
So, how to use return code of ADB command in PowerShell?
正确的检查方法应该是:
adb devices
if($?) {
echo "Command succedded"
} else {
echo "Command failed!"
}
此外,还有一个退出代码$LASTEXITCODE表示0,如果命令执行无任何异常;和非零值,如果命令因某些异常而失败。您可以将其用作:
if($LASTEXITCODE -eq 0) {
echo "Command succedded"
} else {
echo "Command failed!"
}
$?
和$LASTEXICODE
的区别在于前者returnsBoolean,而后者returns是Int32类型.
Even if the command failed(Failure), echo returns True.
您面临此问题的真正原因是,因为您正在尝试卸载 Google Photos 应用程序,这是一个预捆绑的系统应用程序与其他 OEM 供应商应用程序一起使用,具有最小版本。要卸载此类系统应用程序,您需要 root 权限,可以使用 --user 0
标志激活 adb pm
命令,但您需要 root access。当您购买新设备时,它已经安装为系统应用程序并且可以更新。当您尝试卸载它时,它的更新将被卸载并且系统恢复最小的预捆绑版本而不是完全卸载。这就是您收到 Failure [DELETE_FAILED_INTERNAL_ERROR]
消息并随后收到 True
的原因,它应该是 False
但命令不会抛出它。奇怪。