代码拉取完成,页面将自动刷新
同步操作将从 chuanjiao10/kasini3000 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# 建议保存编码为:bom头 + utf8
# 脚本用途是:
# 1 能自动输入密码。解决从win到linux的ps session,不支持通过参数值,指定密码登录的问题。
# 2 能自动输入密码。解决从win到linux的ps session,不支持通过参数值,指定sudo密码,需要手动输入sudo密码的问题。
# 3 脚本限制,会破坏pssession原有的传参。传值。
param
(
[parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[Alias("ipaddress")][String]$目的ip地址,
[Alias("port")][uint16]$端口 = 22,
[ValidateNotNullOrEmpty()]
[Alias("user")][String]$用户名 = 'root',
[parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[Alias("pwd")][String]$密码,
[switch]$sudo ,
#设置成$true 后,登录后,会发送
# "$密码" | sudo -S pwsh -f x.ps1
#或 "$密码" | sudo -S pwsh -c {powershell代码块}
[Alias("file")][String]$脚本文件名 = '',
# [Alias("allparameter")]$传入参数,
[parameter(Position = 0)][String]$ps1Command = '',
[Alias("timeout")][byte]$超时秒 = 20,
[String]$spawn = 'C:\Program Files\PowerShell\7-preview\pwsh.exe',
# 目标swawn,不知支持powershell v5.1
# 支持powershell v6.x
# 支持powershell v7.x
[switch]$ShowWindow #显示窗口,用于debug。
)
function sleep5
{
Start-Sleep -Milliseconds 500
}
function sleep20
{
Start-Sleep -Seconds 1
}
function 获取句柄
{
foreach ($i in 1..8)
{
$script:__hwnd = $FindWindow::windsget($script:__pwsh标题)
if ( ($script:__hwnd -eq 0) -or ($script:__hwnd -eq $null) -or ($script:__hwnd -eq '') )
{
sleep5
Write-Error '获取句柄错误'
}
else
{
return
}
}
Write-Error '错误:获取spawn句柄失败。退出码11'
exit 11
}
function 进入窗口
{
$超时 = (Get-Date).AddSeconds($超时秒)
do
{
sleep5
if ($FindWindow::SetForegroundWindow($script:__hwnd) -eq $true)
{
return
}
Write-Error '进入窗口错误'
}
while ((Get-Date) -lt $超时 )
Write-Error '错误:进入spawn进程超时。退出码12'
exit 12
}
if ($IsLinux -eq $True)
{
Write-Error '错误:这个脚本不支持linux,linux下应使用expect。退出码1'
exit 1
}
if ( ($脚本文件名 -eq $null) -or ($脚本文件名 -eq '') )
{
if ( ($ps1Command -eq $null) -or ($ps1Command -eq '') )
{
Write-Error "错误:没有输入脚本文件名,同时也没有输入代码块"
exit 15
}
}
else
{
if ( ($ps1Command -eq $null) -or ($ps1Command -eq '') )
{
}
else
{
Write-Error "错误:有输入脚本文件名,同时有输入代码块"
exit 16
}
if (Test-Path -LiteralPath $脚本文件名)
{
}
else
{
Write-Error "找不到脚本文件"
exit 17
}
}
if (Test-Path -LiteralPath $spawn)
{
}
else
{
[String]$spawn = 'C:\Program Files\PowerShell\7\pwsh.exe'
if (Test-Path -LiteralPath $spawn)
{
}
else
{
Write-Error '错误:找不到pwsh7。错误码2'
exit 2
}
}
$端口通了 = & 'c:\ProgramData\kasini3000\tcp--ping-v2.ps1' -MyComputerName $目的ip地址 -port $端口 -Quiet
if ($端口通了 -eq $true)
{
}
else
{
if ($env:LANG -eq 'zh_CN.UTF-8')
{
Write-Error "错误:被控机端口不通。错误码24"
}
else
{
Write-Error "error:node port cloesd.exit 24"
}
exit 24
}
#main
$FindWindow = Add-Type -MemberDefinition @"
[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport("user32.dll")]public static extern IntPtr FindWindowEx(IntPtr hwndParent, uint hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll")]public static extern int SendMessage(IntPtr hWnd,int Msg,int wParam,int lParam);
public static IntPtr windsget(string name) {
return FindWindow(null,name);
}
"@ -PassThru -Name MyFindWindow
[System.Reflection.Assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
$script:__pwsh标题 = [GUID]::NewGuid()
$pwsh标题代码 = "[System.Console]::Title = '$script:__pwsh标题' "
if ( ($IsWindows -eq $True) -or ($PSVersionTable.psversion.major -lt 6) ) #win
{
if ($ShowWindow -eq $True)
{
$script:__powershell = Start-Process $spawn -ArgumentList " -NoProfile -noexit -Command $pwsh标题代码 " -PassThru
}
else
{
$script:__powershell = Start-Process $spawn -ArgumentList " -WindowStyle Hidden -NoProfile -noexit -Command $pwsh标题代码 " -PassThru
}
}
sleep20
获取句柄
进入窗口
[System.Windows.Forms.SendKeys]::SendWait(" `$a = New-PSSession -HostName $目的ip地址 -Port $端口 -UserName $用户名 {enter}") | Out-Null
进入窗口
[System.Windows.Forms.SendKeys]::SendWait("$密码{enter}") | Out-Null
#main2
if ($sudo -eq $true)
{
进入窗口
if (($脚本文件名 -eq '') -or ($脚本文件名 -eq $null))
{
[System.Windows.Forms.SendKeys]::SendWait("Invoke-Command -Session `$a -scriptblock {{} write-output $密码 | sudo -S pwsh -c ' $ps1Command ' {}} {enter}") | Out-Null
}
else
{
$ps1Command = Get-Content -LiteralPath $脚本文件名 -Raw
[System.Windows.Forms.SendKeys]::SendWait("Invoke-Command -Session `$a -scriptblock {{} write-output $密码 | sudo -S pwsh -c ' $ps1Command ' {}} {enter}") | Out-Null
}
}
else
{
进入窗口
if (($脚本文件名 -eq '') -or ($脚本文件名 -eq $null))
{
[System.Windows.Forms.SendKeys]::SendWait("Invoke-Command -Session `$a -scriptblock {{} $ps1Command {}} {enter}") | Out-Null
}
else
{
[System.Windows.Forms.SendKeys]::SendWait("Invoke-Command -Session `$a -filepath $脚本文件名 {enter}") | Out-Null
}
}
if ($ShowWindow -eq $True)
{
Start-Sleep -Seconds 20
}
进入窗口
[System.Windows.Forms.SendKeys]::SendWait("exit{enter}") | Out-Null
sleep20
Get-Process $script:__powershell | Stop-Process
exit 0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。