背景。有必要时需要备份远程设备。如果您在授权后手动执行此操作,等待 GUI 完全加载,可能需要 5 - 10 分钟,我编写了一个CURL请求来进行授权 - 它有效。然后我就不再使用命令行了,因为我必须在命令行上徘徊,而且没有我需要的功能。在 PowerShell 中重写。
步骤1.授权请求
$ip = Read-Host "Введите ip-адрес"
$xmlauth = "<request method=""login"" request_id=""1"" username=""name"" password=""pass""/>"
$access = Invoke-WebRequest -Uri ("http://"+$ip+":4000/xap2") `
-Method Post `
-ContentType "text/xml" `
-Body $xmlauth
$sessionid = ([xml]$access.Content).response.session_id
Write-Host $access #пример вывода после успешной авторизации
<response username="name" session_id="123456789" request_id="1" access_lvl="2">
<status status="0" status_text="OK"/>
</response>
Write-Host $sessionid #этот id подставляется во все последующие запросы
123456789
步骤2.请求更改参数
$xml3in = @"
<request method="set" request_id="2" session_id="$sessionid" return_events="false">
<data>
<ports>
<asi_input enable="false" _id="0"/>
<asi_input enable="true" _id="2"/>
<_all _id="8">
<plprep main_globid="2"/>
</_all>
</ports>
</data>
</request>
"@
$request3in = Invoke-WebRequest -Uri ("http://"+$ip+":4000/xap2") `
-Method Post `
-ContentType "text/xml" `
-Body $xml3in
$status = ([xml]$request3in.Content).response.status.status_text
Write-Host $request3in #Пример вывода после успешного выполнения
<response request_id="2">
<status status="0" status_text="OK"/>
</response>
Write-Host $status #Пример вывода текста статуса, можно и по номеру сделать.
OK
if ( $status -like 'ok' ) {
Write-Host "УСТРОЙСТВО ПЕРЕКЛЮЧЕНО КУДА НАДО ($status)" -foregroundcolor Green
}
else {
Write-Host "ЧТО-ТО ПОШЛО НЕ ТАК ($status)" -foregroundcolor Red
}
步骤 3. 请求更改参数(返回原始状态) 唯一的区别在于请求正文。
$xml1in = @"
<request method="set" request_id="3" session_id="$sessionid" return_events="false">
<data>
<ports>
<asi_input enable="true" _id="0"/>
<asi_input enable="false" _id="2"/>
<_all _id="8">
<plprep main_globid="0"/>
</_all>
</ports>
</data>
</request>
"@
问题。如何实现一种场景下动作选项的选择?是否可以通过函数来做到这一点,并在选择选项时仅替换必要的参数?
24.28.10 更新 添加菜单。现在需要在菜单选择选项中实现该功能。
function askchoice {
Clear-Host
Write-Host "░░░░ МЕНЮ РЕЗЕРВИРОВАНИЯ ░░░░" -backgroundcolor DarkBlue
Write-Host "░ ░" -backgroundcolor DarkBlue
Write-Host "░ 1. ВВЕДИТЕ IP-АДРЕС ░" -backgroundcolor DarkBlue
Write-Host "░ 2. ПЕРЕВЕСТИ НА 3in ░" -backgroundcolor DarkBlue
Write-Host "░ 3. ВЕРНУТЬ НА 1in ░" -backgroundcolor DarkBlue
Write-Host "░ Q. ВЫХОД ░" -backgroundcolor DarkBlue
Write-Host "░ ░" -backgroundcolor DarkBlue
Write-Host "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" -backgroundcolor DarkBlue
Write-Host "ТЕКУЩИЙ IP-АДРЕС СТАНЦИИ: $ip" -ForegroundColor Green
}
Do {
askchoice
$choice = Read-Host "ВЫБЕРИТЕ НОМЕР [1-3] ЛИБО Q ДЛЯ ВЫХОДА"
switch ($choice)
{
1 {
$ban = @("10.10.10.10", "10.10.10.11", "10.10.10.12", "10.10.10.13")
do {
$Global:ip = Read-Host "ВВЕДИТЕ IP-АДРЕС"
if ($ban -contains $ip) {
Write-Host "ДОСТУП ЗАПРЕЩЕН" -ForegroundColor Red
}
}
While ($ban -contains $ip)
}
2 {
Write-Host "ВЫПОЛНЯЕТСЯ ПРОЦЕСС РЕЗЕРВИРОВАНИЯ" -ForegroundColor Cyan
#строка кода
ping $ip; pause
}
3 {
Write-Host "ВЫПОЛНЯЕТСЯ ПРОЦЕСС ВОЗВРАТА НА ШТАТНУЮ СХЕМУ" -ForegroundColor Cyan
#строка кода
tracert $ip; pause
}
q {
exit
}
default {
Write-Host "НЕТ НОМЕРА В СПИСКЕ, ПОВТОРИТЕ ВЫБОР" -ForegroundColor Yellow; pause
}
}
}
while ($choice -ne "q")