我在编写PowerShell脚本时遇到了问题,需要通过TCP连接发送和接收数据。但似乎只能执行其中之一。以下是我目前编写的内容。我想监听并等待连接,一旦建立连接,就会接收一个包含IP地址的字符串,并进行一些高级查找以查看登录到该计算机的用户,然后发送回用户名。如果仅发送数据,则可以正常工作。如果仅接收数据,则也可以正常工作。如果尝试同时执行两者,则仅接收部分有效。我做错了什么?
$port = 1234
do {
$user = ""
$endpoint = new-object System.Net.IPEndPoint ([system.net.ipaddress]::any, $port)
$listener = new-object System.Net.Sockets.TcpListener $endpoint
$listener.start()
$client = $listener.AcceptTcpClient() # will block here until connection
$stream = $client.GetStream();
$reader = New-Object System.IO.StreamReader $stream
$writer = New-Object System.IO.StreamWriter $stream
$add = $reader.ReadLine()
#$reader.close()
write-host "Request from " $add
if($add) {
$user = & wmic /Node:$add ComputerSystem Get UserName
write-host "User returned is " $user[2]
}
if($user[2] -eq "ERROR:") {
$user[2] = "ErrNoUserW"
} elseif(!$user[2]) {
$user[2] = "ErrServerW"
}
$writer.Write($user[2])
#$writer.close()
$stream.close()
$client.close()
$listener.stop()
} while(1)
$writer.Flush()
。 - user4003407wmic
。请改用Get-WmiObject
:$user = (Get-WmiObject -Computer $add -Class Win32_ComputerSystem).UserName
。 - Ansgar Wiechers