用 PowerShell 更新 Oray 花生壳动态 IP
花生壳是 oray 公司提供的 DDNS 客户端。官方的客户端庞大臃肿:
不过好在花生壳开放了基于 http 的 API。这样我们可以很容易地用 PowerShell 实现更新动态 IP 的功能:
param (
$UserName = 'xxx',
$Password = 'yyy',
$HostName,
$IP
)
function Get-ExternalIP {
#(Invoke-WebRequest 'http://myip.dnsomatic.com' -UseBasicParsing).Content
((Invoke-WebRequest 'http://ddns.oray.com/checkip').ParsedHtml.body.innerText -split ':')[1].Trim()
}
function Update-OrayDdns {
param (
[parameter(Mandatory = $true)]
[string]$UserName,
[parameter(Mandatory = $true)]
[string]$Password,
[parameter(HelpMessage = '需要更新的域名,此域名必须是开通花生壳服务。多个域名使用,分隔,默认为空,则更新护照下所有激活的域名。')]
[string]$HostName,
[parameter(HelpMessage = '需要更新的IP地址,可以不填。如果不指定,则由服务器获取到的IP地址为准。')]
[string]$IP
)
$request = 'http://ddns.oray.com/ph/update?hostname={0}' -f ($HostName -join ',')
if ($IP) {
$request = $request + '&myip=' + $IP
}
$encoded = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($UserName+":"+$Password ))
$headers = @{Authorization = "Basic "+$encoded}
$response = Invoke-WebRequest $request -Headers $headers -UseBasicParsing
$codes = @{
good = '更新成功,域名的IP地址已经更新。'
nochg = '更新成功,但没有改变IP。一般这种情况为本次提交的IP跟上一次的一样。'
notfqdn = '未有激活花生壳的域名。'
nohost = '域名不存在或未激活花生壳。'
abuse = '请求失败,频繁请求或验证失败时会出现。'
'!donator' = '表示此功能需要付费用户才能使用,如https。'
911 = '系统错误'
}
$code = ($response.Content -split ' ')[0]
$message = $codes[$code]
if ($code -eq 'good' -or $code -eq 'nochg') {
Write-Output $message
} elseif ($code -eq 'notfqdn' -or $code -eq 'nohost') {
Write-Warning $message
} else {
Write-Error $message
}
}
Update-OrayDdns $UserName $Password $HostName
您也可以从这里 下载 写好的脚本。
用 PowerShell 更新 Oray 花生壳动态 IP