PowerShell远程管理全解析
立即解锁
发布时间: 2025-08-14 00:54:56 阅读量: 17 订阅数: 22 


精通PowerShell脚本编写:自动化与简化任务
# PowerShell 远程管理全解析
## 1. 远程管理基础操作
### 1.1 禁用远程管理
在 PowerShell 中,可以使用 `Disable-PSRemoting` 禁用远程管理。禁用时会显示以下警告:
```powershell
PS> Disable-PSRemoting
WARNING: Disabling the session configurations does not undo all the changes
made by the Enable-PSRemoting or Enable-PSSessionConfiguration cmdlet. You
might have to manually undo the changes by following these steps:
1. Stop and disable the WinRM service.
2. Delete the listener that accepts requests on any IP address.
3. Disable the firewall exceptions for WS-Management communications.
4. Restore the value of the LocalAccountTokenFilterPolicy to 0, which restricts
remote access to members of the Administrators group on the computer.
```
### 1.2 启用 PowerShell 7 远程会话配置
如果在 PowerShell 7 控制台中运行 `Enable-PSRemoting`,将创建额外的会话配置,允许选择 Windows PowerShell(默认)或 PowerShell 7。可以通过设置 `Invoke-Command` 和 `PSSession` 命令的 `ConfigurationName` 参数或 `$PSSessionConfigurationName` 偏好变量为 `PowerShell.7` 来访问 PowerShell 7 配置。
## 2. WSMan 驱动器的使用
### 2.1 查看和更改远程配置
当 PowerShell 以管理员身份运行时,可以访问 WSMan 驱动器的内容,用于查看和更改远程配置。例如,更新 `MaxEnvelopeSize` 属性:
```powershell
Set-Item WSMan:\localhost\MaxEnvelopeSizekb 8KB
```
该属性定义在 WSMan 协议扩展规范中:https://learn.microsoft.com/en-gb/openspecs/windows_protocols/ms-wsman/8a6b1967-ff8e-4756-9a3b-890b4b439847。该值必须是 1024 的倍数,更改后可能需要重启 WinRM 服务:
```powershell
Restart-Service winrm
```
### 2.2 配置 SSL
默认情况下,Windows 远程请求是未加密的,可以创建 HTTPS 监听器来支持加密。创建 HTTPS 监听器前需要证书。
#### 2.2.1 创建自签名证书
在 Windows 10 和 11 中,可以使用 PKI 模块创建自签名证书:
```powershell
PS> New-SelfSignedCertificate -DnsName $env:COMPUTERNAME
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\MY
Thumbprint Subject
---------- -------
D8D2F174EE1C37F7C2021C9B7EB6FEE3CB1B9A41 CN=SSLTEST
```
#### 2.2.2 创建 HTTPS 监听器
使用 WSMan 驱动器创建 HTTPS 监听器:
```powershell
$params = @{
Path = 'WSMan:\localhost\Listener'
Address = '*'
Transport = 'HTTPS'
CertificateThumbprint = 'D8D2F174EE1C37F7C2021C9B7EB6FEE3CB1B9A41'
Force = $true
}
New-Item @params
```
如果 Windows 防火墙正在运行,需要创建新规则允许 TCP 端口 5986 的入站连接:
```powershell
$params = @{
DisplayName = $name = 'Windows Remote Management (HTTPS-In)'
Name = $name
Profile = 'Any'
LocalPort = 5986
Protocol = 'TCP'
}
New-NetFirewallRule @params
```
#### 2.2.3 查看 HTTPS 监听器
```powershell
Get-ChildItem WSMan:\localhost\Listener\* |
Where-Object {
(Get-Item "$($_.PSPath)\Transport").Value -eq 'HTTPS'
}
```
## 3. 用户账户控制(UAC)
### 3.1 UAC 远程限制
UAC 会限制使用远程连接登录的本地(非域)用户账户。默认情况下,远程连接将以标准用户账户进行。`Enable-PSRemoting` 命令会禁用 UAC 远程限制。
### 3.2 查看和修改 UAC 远程限制设置
查看当前值:
```powershell
$params = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'
Name = 'LocalAccountTokenFilterPolicy'
}
Get-ItemProperty @params
```
禁用 UAC 远程限制:
```powershell
$params = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'
Name = 'LocalAccountTokenFilterPolicy'
Value = 1
Force = $true
}
Set-ItemProperty @params
```
## 4. 受信任主机设置
### 4.1 受信任主机的作用
如果客户端或服务器不属于同一域或属于不受信任的域,使用远程管理连接可能会失败。远程系统必须列在受信任主机中或使用 SSL。受信任主机设置在客户端。
### 4.2 查看和添加受信任主机
查看当前受信任主机列表:
```powershell
Get-Item WSMan:\localhost\Client\TrustedHosts
```
添加受信任主机的函数:
```powershell
function Add-TrustedHost {
param (
[string]$Hostname
)
$item = Get-Item WSMan:\localhost\Client\TrustedHosts
$trustedHosts = @($item.Value -split ',')
$trustedHosts = $trustedHosts + $Hostname |
Where-Object { $_ } |
Select-Object -Unique
$item | Set-Item -Value ($trustedHosts -join ',')
}
```
添加受信任主机时会有确认提示,确认后再次查看列表会显示新添加的主机。
## 5. Linux 上的远程管理
### 5.1 安装 PowerShell
在尝试配置远程管理之前,应按照微软提供的说明在 Linux 上安装 PowerShell:https://learn.microsoft.com/powershell/scripting/install/installing-powershell-on-linux。
### 5.2 配置远程管理
#### 5.2.1 检查并更改默认 shell
```powershell
Get-Content /etc/shells # Use cat or less in Bash
chsh -s /usr/bin/pwsh
```
#### 5.2.2 安装必要的包
以 CentOS 7 为例,使用 `yum` 安装 `omi` 和 `omi-psrp-se
0
0
复制全文
相关推荐










