我有一个 powershell 脚本运行如下:
> $client = New-Object System.Net.Sockets.TCPClient('x.x.x.x',443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);[Sytem.IO.File]::AppendAllText('<path\to\file>', $data)};$client.Close();
它连接、读取流、写入文件,但不退出。然后我尝试使用 Ctrl+C 但它不起作用。
我希望它在完成读取文件后退出,也想知道为什么它不像在 Linux 上那样使用 Ctrl+C 退出。
如果您在 PowerShell 会话中并运行此代码,则它在当前会话中。一旦你的代码完成,你会从你开始代码的地方返回到 Powershell 提示符。因此,您的代码已关闭,而不是您的会话。
代码运行后,CRTL+C 不会关闭 PowerShell,exit 会。
您只是关闭 Socket 连接对象。您没有从启动它的位置退出 PowerShell 会话。
如果要从 PowerShell 会话运行前台代码块,可以使用 Start-Process。
例如:
您不需要 exit 执行此操作或 CRTL+C 工作,因为它会在代码完成后自动关闭会话。
请参阅有关如何利用 Start-Process 选项和 PowerShell 命令行选项的帮助文件。