powershell远程控制学习笔记(1)

(一)概述

PowerShell 是构建于 .NET 上基于任务的命令行 shell 和脚本语言。PowerShell帮助系统管理员和高级用户快速自动化管理操作系统(Linux、macOS和Windows)和进程的任务。

使用 PowerShell 命令可以从命令行管理计算机。PowerShell providers允许您像访问文件系统一样轻松地访问数据存储,比如注册表和证书存储。PowerShell具有丰富的表达式解析器和完全成熟的脚本语言。

powershell提供了可以帮助查找相关cmdlet的命令,例如,若要查找用于查看和更改 Windows 服务的 cmdlet 列表,请输入:

Get-Command *-Service

例如,若要查找用于查看和更改 Windows 服务的 cmdlet 列表,请键入:

Get-Help Get-Service

大多数 cmdlet 会返回对象,这些对象可获得操作,然后再呈现为显示文本。 若要全面了解 cmdlet 的输出,请将输出通过管道传递给 Get-Member cmdlet。 例如,下面的命令显示 Get-Service cmdlet 的输出对象成员的相关信息。

Get-Service | Get-Member

以上文字摘自官方说明文档:
https://docs.microsoft.com/zh-cn/powershell/scripting/overview?view=powershell-7

(二)远程控制

Windows PowerShell 通过使用各种技术(包括 WMI、RPC 和 WS-Management)支持远程处理。

■无特殊配置cmdlet(无需WinRM设置)

许多 Windows PowerShell cmdlet 可以通过指定ComputerName 参数,在一台或多台远程计算机上收集数据和更改设置。 这些 cmdlet 使用不同的通信协议,无需进行任何特殊配置即可在所有 Windows 操作系统上工作。
通常情况下,无需特殊配置即可进行远程处理的 cmdlet 有 ComputerName 参数,但没有 Session 参数。 如果要在会话中查找这些 cmdlet,可以输入以下命令:

Get-Command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}

■通过WinRM远程处理

使用WinRM(协议:WS-Management),我们可以在一台或多台远程计算机上运行任何Windows PowerShell命令。我们还可以建立持久连接、启动交互会话并在远程计算机上运行脚本。

该方法要求被远程计算机与远程管理计算机都进行WinRM的配置。具体配置方法如下:

被远程计算机:

  1. 使用管理员用户打开powershell窗口。
  2. 执行Enable-PSRemoting命令。
    该命令会自动设置相应的防火墙策略,详细请参考【About Remote Requirements
Enable-PSRemoting -Force
  1. 输入相关命令,验证远程处理配置是否正确。例:
New-PSSession

如果配置成功,该命令会在本地计算机上创建一个会话,并返回表示该会话的对象。输出内容如下:

Id Name        ComputerName    State    ConfigurationName
-- ----        ------------    -----    -----
1  Session1    localhost       Opened   Microsoft.PowerShell

远程管理计算机:

  1. 执行以下命令,启动WinRM
winrm quickconfig -q
  1. 设置信任主机
Set-Item wsman:\localhost\client\trustedhosts *
  1. 重启WinRM服务
Restart-Service WinRM

远程处理

远程处理有多种方式,此处只列举以下三种。

  • 使用New-PSSession创建到本地或远程计算机的持久连接。
    例:为Server01计算机上创建一个新的PSSession,并将其保存在$Server01变量中。
$Server01 = New-PSSession -ComputerName Server01
  • 使用Enter-PSSession 建立交互式会话,示例如下,可输入exit退出会话。
Enter-PSSession -ComputerName Server01
[Server01]: PS>
[Server01]: Get-Process PowerShell > C:\ps-test\Process.txt
[Server01]: exit
  • 使用Invoke-Command在远程计算机上执行命令。
    ComputerName :远程计算机
    Credential :认证信息
    ScriptBlock :要执行的命令行。
    示例如下:
$Srv = "Server01"
$Username = 'Admin'
$Password = 'Admin'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
Invoke-Command -ComputerName $Srv -Credential $Cred -ScriptBlock { Get-Service }

(三)常用cmdlet

这次学习的重点是通过WIMI取得系统软硬件信息,主要用到了Get-CimInstance cmdlet,此处主要为了记录:
WMI提供的各种类
WMI reference

筛选功能
可以使用 Select-Object cmdlet 创建新的自定义 PowerShell 对象(包含从用于创建它们的对象中选择的属性)。 键入下面的命令以创建仅包括 Win32_LogicalDisk WMI 类的 Name 和 FreeSpace 属性的新对象:

PS C:\WINDOWS\system32> Get-CimInstance -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace

Name    FreeSpace
----    ---------
C:     2192871424
D:    20595388416
E:    58155708416

可以使用 Select-Object 创建计算属性。 这样即可以以十亿字节为单位显示 FreeSpace,而非以字节为单位。

PS C:\WINDOWS\system32> Get-CimInstance -Class Win32_LogicalDisk |
>>   Select-Object -Property Name, @{
>>     label='FreeSpace'
>>     expression={($_.FreeSpace/1GB).ToString('F2')}
>>   }

Name FreeSpace
---- ---------
C:   2.04
D:   19.18
E:   54.16
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值