验证远程操作的局部变量

Posted

技术标签:

【中文标题】验证远程操作的局部变量【英文标题】:Local Variable to validate remote operation 【发布时间】:2021-12-03 06:24:52 【问题描述】:

我正在尝试验证远程机器是否可以通过特定端口连接到另一台机器

伪代码

$RemoteSession = New-PSSession -ComputerName MyRemoteVM

Invoke-Command -Session $RemoteSession -ScriptBlock $RsTestResults = New-Object System.Net.Sockets.TcpClient -Argument 2ndRemoteVM , 2ndRemoteVMPort

但是,我似乎无法获得该测试的结果 我已经尝试添加另一个像下面这样的 Invoke-Command,但它没有帮助

$LocalResults = Invoke-Command -ScriptBlock $RsTestResults

有什么想法吗?

【问题讨论】:

【参考方案1】:

当你这样做时:

Invoke-Command -Session $RemoteSession -ScriptBlock 
    $RsTestResults = New-Object System.Net.Sockets.TcpClient -ArgumentList 2ndRemoteVM, 2ndRemoteVMPort

变量$RsTestResults 正在远程主机上创建,其范围将被称为主机。如果您希望将System.Net.Sockets.TcpClient 的结果存储在本地主机上,则需要将Invoke-Command 的结果存储如下:

$RsTestResults = Invoke-Command -Session $RemoteSession -ScriptBlock 
    New-Object System.Net.Sockets.TcpClient -ArgumentList 2ndRemoteVM, 2ndRemoteVMPort


编辑

解释您收到的错误消息:

PS > New-Object System.Net.Sockets.TcpClient -ArgumentList $null, $null
New-Object : Exception calling ".ctor" with "2" argument(s): "The requested address is not valid in its context xxx.xxx.xxx.xxx:0"

这意味着IPAddressPort 的变量永远不会传递给Invoke-Command

您有两个选项可以将这些变量传递给 cmdlet,一个是 $using:variableName,另一个是 -ArgumentList

假设您有 2 个局部变量,例如:

$ipAddress = $csv.IPAddress
$port = $csv.Port
$using:variableName
$RsTestResults = Invoke-Command -Session $RemoteSession -ScriptBlock 
    New-Object System.Net.Sockets.TcpClient -ArgumentList $using:ipAddress, $using:port

-ArgumentList
$RsTestResults = Invoke-Command -Session $RemoteSession -ScriptBlock 
    param($ipAddress, $port)
    New-Object System.Net.Sockets.TcpClient -ArgumentList $ipAddress, $port
 -ArgumentList $ipAddress, $port

【讨论】:

这行不通 - powershell 将序列化生成的对象,您将无法在本地会话中与客户端交互。 @MathiasR.Jessen 你是对的,由于序列化,对象会丢失它的方法。我应该指出这一点,我的错。但是,如果 OP 只是想知道端口是否打开,我认为这就足够了。 感谢大家的回复。但是,我仍然没有得到它(提前抱歉) 感谢大家的回复。但是,我仍然没有得到它(提前抱歉)。当我将代码更改为: $RsTestResults = Invoke-Command -Session $RemoteSession - ScriptBlock New-Object System.Net.Sockets.TcpClient - Argument 2ndRemoteVM, 2ndRemotePort 我收到一个错误 New-Object: Exception calling ".ctor"带有“2”个参数“请求的地址在其上下文中无效[IP地址]:0 @TallKewlOnez 2ndRemoteVM2ndRemoteVMPort 是硬编码值还是传递给 Invoke-Command 的变量?如果是这样,你如何传递这些变量?另一方面,从阅读错误信息来看,- Argument 中似乎多了一个空格(应该是-Argument)。

以上是关于验证远程操作的局部变量的主要内容,如果未能解决你的问题,请参考以下文章

Non-local Neural Networks

Epson投影仪的远程身份验证

Android 逆向Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )

Android 逆向Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )

启用远程缓存的非密封 Bazel 操作

putty远程连接linux和密钥验证