在工作中需要使用连接到一台设备上进行一些操作,
大致分为以下几步:
netsh interface ip set address name="XXXXX" source=static addr=X.X.X.X mask=X.X.X.X
xxxxxxx(密码)
cat /xxx/xxxxx/xxx.conf
在第四部会返回一个字符串(例如:lisi ),然后将该字符串作为第五步的参数:
每次都得一步一步输入,感觉挺麻烦的,所以想要写成一个脚本,前几部可以使用 vb 来实现:
Dim WshShell
Set WshShell=WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd.exe"
WScript.Sleep 1500
WshShell.SendKeys "netsh interface ip set address name='XXXXX' source=static addr=X.X.X.X mask=X.X.X.X"
WScript.Sleep 1500
WshShell.SendKeys "ssh [email protected]"
WshShell.SendKeys "{ENTER}"
WScript.Sleep 1500
WshShell.SendKeys "xxxxxxx"
WshShell.SendKeys "{ENTER}"
WScript.Sleep 1500
WshShell.SendKeys "cat /xxx/xxxxx/xxx.conf"
该如何接收第四步的返回值作为第五步的参数呢?
不懂 VB ,请大佬们帮忙,感谢感谢
1
dito 306 天前 via Android
用 Dim 定义一个变量
|
2
aiqinxuancai 305 天前
授人鱼不如授人渔,我建议你使用 ChatGPT
|
3
julyclyde 305 天前
首先你这不是 VB 而是 VBS
其次建议你用 wscript 按顺序调用“各个”命令,而不是调一个 cmd.exe 然后给它发命令 |
4
li02 305 天前
在 Windows 的 VBS 脚本中,可以使用以下方法将一个命令的返回值作为另一个命令的参数:
方法一:使用 WshShell 对象 WshShell 对象是 VBS 脚本中用于执行命令的工具。可以使用 Run 方法执行命令,并使用 StdOut 属性获取命令的返回值。例如,以下脚本将使用 ipconfig 命令获取 IP 地址,并将 IP 地址作为 echo 命令的参数: VBScript Set objShell = CreateObject("WScript.Shell") ' 执行 ipconfig 命令 Set objExec = objShell.Run("ipconfig", 0, True) ' 获取 IP 地址 strIP = objExec.StdOut.ReadLine ' 显示 IP 地址 WScript.Echo strIP 请谨慎使用代码。 方法二:使用 StdOut 对象 StdOut 对象是 VBS 脚本中用于获取命令输出的工具。可以使用 CreateObject 函数创建 StdOut 对象,并使用 ReadLine 方法获取命令的返回值。例如,以下脚本将使用 ipconfig 命令获取 IP 地址,并将 IP 地址作为 echo 命令的参数: VBScript Set objStdOut = CreateObject("StdOut") ' 执行 ipconfig 命令 objStdOut.Exec "ipconfig" ' 获取 IP 地址 strIP = objStdOut.ReadLine ' 显示 IP 地址 WScript.Echo strIP 请谨慎使用代码。 方法三:使用 RegEx 对象 RegEx 对象是 VBS 脚本中用于匹配正则表达式的工具。可以使用 Exec 方法执行命令,并使用 Match 方法匹配命令的输出。例如,以下脚本将使用 ipconfig 命令获取 IP 地址,并将 IP 地址作为 echo 命令的参数: VBScript Set objRegEx = CreateObject("RegEx") ' 执行 ipconfig 命令 objRegEx.Exec "ipconfig" ' 匹配 IP 地址 Set objMatch = objRegEx.Match("IPv4 Address\s*:\s*(\d+\.\d+\.\d+\.\d+)", 1) ' 获取 IP 地址 strIP = objMatch.SubMatches(0) ' 显示 IP 地址 WScript.Echo strIP 请谨慎使用代码。 注意: 在使用 WshShell 对象时,需要确保 Run 方法的返回值为 0 ,表示命令执行成功。 在使用 StdOut 对象时,需要确保 Exec 方法的返回值为 True ,表示命令执行成功。 在使用 RegEx 对象时,需要确保 Match 方法的返回值为 True ,表示匹配成功。 以下是一些具体的示例: 示例一:使用 WshShell 对象获取 IP 地址并显示 VBScript Set objShell = CreateObject("WScript.Shell") ' 执行 ipconfig 命令 Set objExec = objShell.Run("ipconfig", 0, True) ' 获取 IP 地址 strIP = objExec.StdOut.ReadLine ' 显示 IP 地址 WScript.Echo strIP 请谨慎使用代码。 示例二:使用 StdOut 对象获取 IP 地址并显示 VBScript Set objStdOut = CreateObject("StdOut") ' 执行 ipconfig 命令 objStdOut.Exec "ipconfig" ' 获取 IP 地址 strIP = objStdOut.ReadLine ' 显示 IP 地址 WScript.Echo strIP 请谨慎使用代码。 示例三:使用 RegEx 对象获取 IP 地址并显示 VBScript Set objRegEx = CreateObject("RegEx") ' 执行 ipconfig 命令 objRegEx.Exec "ipconfig" ' 匹配 IP 地址 Set objMatch = objRegEx.Match("IPv4 Address\s*:\s*(\d+\.\d+\.\d+\.\d+)", 1) ' 获取 IP 地址 strIP = objMatch.SubMatches(0) ' 显示 IP 地址 WScript.Echo strIP |
5
drymonfidelia 305 天前
|
6
lixyz OP @drymonfidelia 是正确的,我是需要在 windows 下通过 ssh 去连接一台 linux 设备,然后执行一些预处理命令,没办法提前在 linux 设备上做操作,只能每次连接之后进行操作,所以想着通过一个脚本直接把这些前期步骤做了
|
7
drymonfidelia 305 天前
@lixyz 他的 GPT 脚本只完成了第一步,完全没回答你的问题
|
8
geelaw 305 天前 via iPhone
本地 *nix Bash 上运行 cat 并把 stdout 作为 export 的参数,只需要 export $(cat blah)"。让远程 *nix Bash 运行 cat 之后把 stdout 当作远程计算机上的 export 的参数,直接
ssh user@remote "export $(cat blah)" 就好,于是只要用 VBS 执行上面的命令。 另外 netsh 的效果应该是长期的,所以单独运行就行了。要让 ssh 无交互登录,应该考虑使用密钥对验证,而不是密码。 楼主最开始的代码,如果打开 cmd.exe 后 5 秒后,焦点不在 cmd.exe ,那会失败,很不稳定。 |
9
tinola 304 天前
用 powershell 会不会方便一些.
|