我在 AWS 中启动了几个服务器,我想使用 Powershell 读取文件的内容。
在服务器 1 上,我创建了一个名为 的文件App_configuration.txt
,并将其放在 的根目录中c:\
。
该文件只有两行:
<Path>C:\GoodToGo</Path>
<Path>C:\GoodToGo2</Path>
我尝试使用服务器的远程 IP 使用此命令访问文件。应该xx.xxx.xx.xxx
是远程 IP:
Get-Content -Path "\\xx.xxx.xx.xxx\c$\App_configuration.txt"
Get-Content : Cannot find path '\\xx.xxx.xx.xxx\c$\App_configuration.txt' because it does not exist.
At line:1 char:1
+ Get-Content -Path "\\xx.xxx.xx.xxx\c$\App_configuration.txt"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (\\xx.xxx.xx.xxx\c$\App_configuration.txt:String) [Get-Content], ItemNot
FoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand
我可以通过 RDP 进入远程服务器并列出文件:
PS C:\> ls C:\App_configuration.txt
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/2/2021 4:12 PM 51 App_configuration.txt
我在本地计算机上的用户与可以登录远程计算机的用户不是同一个。我尝试访问的服务器位于 AWS 中,我尝试从本地计算机访问它。
我在 AWS 安全组(防火墙)上打开了 powershell 端口5985
,并且可以使用 telnet 远程连接到它。
为什么我无法使用此 powershell 行读取此远程文件?我认为问题可能与网络有关。
答案1
使用调用命令Get-Content
由于端口已打开,因此可以从内部运行命令5985
。
否则允许SMB:文件和打印共享或适用的 TCP 端口通过 Windows 防火墙。
PowerShell 远程调用命令
Invoke-Command -ComputerName <IP Address> -ScriptBlock { Process {
Get-Content -Path "C:\App_configuration.txt"
}
};
PowerShell 远程调用命令(带凭证)
$cred = Get-Credential "domain\administrator"
Invoke-Command -ComputerName <IP Address> -ScriptBlock { Process {
Get-Content -Path "C:\App_configuration.txt"
}
} -AsJob -Credential $cred;
支持资源
-
-ScriptBlock scriptblock
要运行的命令。
将命令括在花括号中
{ }
以创建脚本块。此参数是必需的。 -
Microsoft 文件共享 SMB:用户数据报协议 (UDP) 端口 135 至 139 和传输控制协议 (TCP) 端口 135 至 139。没有网络基本输入/输出系统 (NetBIOS) 的直接托管 SMB 流量:端口 445(TCP 和 UPD)。