powershell - 将 PowerShell cmdlet 的错误级别传递给批处理文件
问题描述
我正在修改现有批处理文件以测试服务器上的端口。我能看到的唯一方法是使用 PowerShell。我需要执行一个 cmdlet 并将错误级别传回批处理文件。所以我执行这样的事情:
PowerShell -Command "Test-NetConnection -ComputerName www.google.com -Port 80"
- 这是一个现有的已获批准的脚本,我只是进行了一次更改,而不是将整个内容重写到 PowerShell
- 由于这是一个 cmdlet,$? 将错误作为 True 或 False 传递,而不是 $LastExitCode
解决方案
与 不同Test-Connection
,Test-NetConnection
不要直接抛出错误,只有在连接失败时发出警告(但您不能使用第一个端口测试端口)。确切地说,使用 ErrorVariable 找不到错误,但这不会使用 ErrorAction 抛出。
我认为最好的应该是:
@echo off
PowerShell -Command "try { Test-NetConnection -ComputerName localhost -Port 80 -WarningAction Stop } catch { exit 1 }"
if ERRORLEVEL 1 GOTO error
echo Continue
exit
:error
echo Error
ERRORLEVEL
如果连接被验证,则为 0,如果连接失败,则为 1(您当然可以设置所需的退出代码)。
推荐阅读
- css - 为什么我的媒体查询在引导程序上不起作用?
- java - 检查阅读器是否为空的最佳方法是什么?
- oracle - utl_raw.cast_to_varchar 增加字符串的长度
- javascript - 在异步 JS 中维护上下文:以 web3.eth.getBalance() 为例
- python - 烧瓶/Python 和 Ajax
- docker - Traefik 在每次重启时重新创建所有 ACME 证书
- c# - 创建将在 .net 核心中返回通用抽象类型对象的工厂
- python - 我用于将二进制值转换为十进制的 python 代码没有按我的意愿工作
- javascript - undefined 不是对象(评估 newText.split)
- java - 找到一条线上到另一个点的最近点