Windows跨机创建目录及无Ansible远程执行PowerShell脚本报错求助
问题解答
一、远程创建目录(Windows到Windows)
常用两种实现方式:
1. 基于WinRM的PowerShell远程创建
先确保WinRM配置正常(下文会解决你的连接报错),直接用Invoke-Command执行创建命令:
Invoke-Command -ComputerName 192.168.1.21 -Credential (Get-Credential) -ScriptBlock { New-Item -Path "C:\RemoteDir" -ItemType Directory -Force }
2. 通过SMB共享创建
若目标机开启SMB服务且你有对应目录权限,可直接用UNC路径创建:
# 利用目标机默认共享的C盘(C$)创建目录 New-Item -Path "\\192.168.1.21\C$\RemoteDir" -ItemType Directory -Force
注意:需持有目标机管理员权限,且防火墙未拦截SMB端口(445)
二、同一网络下远程执行PowerShell脚本(不使用Ansible)
核心依赖WinRM服务,先解决你遇到的Enter-PSSession连接报错,再讲执行脚本的具体方法:
解决Enter-PSSession连接报错
已确认WinRM服务运行,按以下顺序排查修复:
- 调整目标机防火墙规则
默认公共网络下WinRM仅允许同子网访问,执行命令放开限制:
# 允许所有IP访问WinRM(可按需改为指定IP段) Set-NetFirewallRule -Name WINRM-HTTP-In-TCP -RemoteAddress Any Set-NetFirewallRule -Name WINRM-HTTP-In-TCP-PUBLIC -RemoteAddress Any
- 在发起主机添加信任主机
将目标机IP加入WinRM信任列表:
# 添加单个目标机信任 Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.1.21" -Force # 多目标机用逗号分隔:"192.168.1.21,192.168.1.22"
- 验证WinRM连通性
在发起主机执行命令测试基础连接:
Test-WSMan 192.168.1.21
返回WinRM版本信息则说明连接基础正常。
- 确认目标机WinRM监听配置
在目标机执行命令检查监听状态:
WinRM enumerate winrm/config/listener
需确保存在监听HTTP(默认5985端口)的配置,且监听地址为*或包含目标机IP。
远程执行脚本的两种方式
- 交互式会话(Enter-PSSession)
修复报错后,用原命令进入远程会话,再执行脚本:
# 进入远程会话 Enter-PSSession -ComputerName 192.168.1.21 -Credential (Get-Credential) # 在会话内执行目标机上的脚本 .\C:\scripts\your_script.ps1 # 退出会话 Exit-PSSession
- 非交互式执行(Invoke-Command)
无需进入会话,直接远程执行本地脚本或脚本块:
# 执行本地脚本到远程机器 Invoke-Command -ComputerName 192.168.1.21 -Credential (Get-Credential) -FilePath "C:\local_scripts\your_script.ps1"
或直接传递脚本内容:
Invoke-Command -ComputerName 192.168.1.21 -Credential (Get-Credential) -ScriptBlock { Write-Host "远程执行脚本成功" New-Item -Path "C:\test_dir" -ItemType Directory }
内容的提问来源于stack exchange,提问作者AnandArc
相关产品推荐
相关产品推荐

