使用 PowerShell 7 管理 Windows、Linux 和 macOS 系统
1. 使用 CIM 和 WMI 查询数据
在 Windows 环境中,我们可以使用 CIM(Common Information Model)和 WMI(Windows Management Instrumentation)完成两项主要任务:查找信息和更改设置,并且通常可以同时在大量计算机上执行这些操作。下面介绍两个常用的 CIM cmdlet:
1.1 Get - CimClass
此 cmdlet 用于获取指定命名空间中的 CIM 类列表,如果未指定命名空间,则使用默认命名空间。其参数如下:
| 参数 | 描述 |
| ---- | ---- |
| -ClassName | 可指定一个类,或在查找特定类时提供部分类名,例如 Get - CimClass -ClassName *disk* 会获取 CIMV2 中名称包含“disk”的所有类。 |
| -Namespace | 允许指定除 root/CIMV2 之外的命名空间。 |
| -ComputerName | 可指定远程计算机,可使用 FQDN、NetBIOS 名称或 IP 地址。 |
| -MethodName | 用于搜索具有特定方法的类,例如 Get - CimClass -MethodName 'term*' 会返回具有 Terminate 方法的 Win32_Process 类。 |
| -PropertyName | 类似于 -MethodName 参数,用于搜索具有特定属性的类。 |
| -QualifierName | 限定符类似于应用于类的标签,没有标准列表,但有时很有用,如 Get - CimClass -QualifierName 'deprecated' 可检索正在逐步淘汰的类列表。 |
| -Amended | 获取修正后的信息,通常是根据计算机区域设置而变化的信息。 |
| -OperationTimeoutSec | 在对远程计算机运行命令时,可指定超时时间,默认网络超时时间为 3 分钟。 |
| -CimSession | 允许在预先存在的 CIM 会话中运行命令。 |
1.2 Get - CimInstance
该 cmdlet 用于获取给定 CIM 类的实例,默认命名空间为 root/CIMV2 。它与 Get - CimClass 有许多相同的参数,也有一些差异:
| 参数 | 描述 |
| ---- | ---- |
| -CimSession | 与 Get - CimClass 相同。 |
| -ClassName | 与 Get - CimClass 相同。 |
| -ComputerName | 与 Get - CimClass 相同。 |
| -Filter | 允许指定过滤字符串以仅获取特定实例,例如 Get - CimInstance -Classname Win32_Printer -Filter "Name like 'HP%'" 会查找本地计算机上的 HP 打印机,需使用 Windows Query Language (WQL) 或 Cassandra Query Language (CQL)。 |
| -KeyOnly | 仅返回实例的键属性,而非所有属性。 |
| -Namespace | 与 Get - CimClass 相同。 |
| -OperationTimeoutSec | 与 Get - CimClass 相同。 |
| -Property | 与 Get - CimClass 不同,此参数用于检索指定属性列表,而非搜索具有给定属性的实例。 |
| -Query | 允许指定用 WQL 或 CQL 编写的查询字符串,例如 Get - CimInstance -Query "SELECT * from Win32_Printer WHERE name LIKE 'HP%'" 会再次查找 HP 打印机。 |
| -QueryDialect | 指定查询所使用的方言,默认是 WQL,通常仅在提供用 CQL 编写的查询时使用。 |
| -Shallow | 默认情况下, Get - CimInstance 返回类的所有实例以及任何子类的实例,此参数可防止返回子类的结果。 |
这两个 cmdlet 都有 -ComputerName 参数用于处理远程计算机。每次使用该参数时,会创建并移除一个临时 CIM 会话。如果要对远程计算机运行多个命令,可以创建一个持久的 CIM 会话。
2. CIM 会话
有四个用于操作 CIM 会话的 cmdlet: New - CimSession 、 Get - CimSession 、 Remove - CimSession 和 New - CimSessionOption 。它们的行为与 PowerShell 远程处理 cmdlet 非常相似。CIM 会话在使用 Kerberos 作为默认身份验证方案的 Active Directory 域环境中效果最佳。如果不可用,则需要将远程计算机添加到 WinRM 的受信任主机例外列表中。
New - CimSession 的参数如下:
| 参数 | 描述 |
| ---- | ---- |
| -Authentication | 指定要使用的身份验证方案,在域环境中,Kerberos 是最佳选择。 |
| -CertificateThumbprint | 在基于证书的身份验证方案中,需要提供证书的详细信息。 |
| -ComputerName | 要操作的远程计算机名称,如果未指定,则通过 DCOM 创建到本地计算机的 CIM 会话,远程计算机使用 WSMan。 |
| -Credential | 根据所使用的身份验证方案,可能需要提供凭据对象。 |
| -Name | 可为会话分配一个友好名称,方便操作。 |
| -OperationTimeoutSec | 与 Get - CimClass 相同。 |
| -Port | 在网络受限的情况下可指定特定的 TCP 端口,但不建议这样做。 |
| -SessionOption | 允许通过 New - CimSessionOption 创建一个 SessionOption 对象来设置会话的高级选项。 |
| -SkipTestConnection | 阻止 cmdlet 在创建会话之前测试会话连接性。 |
以下是使用 CIM 会话的示例:
# 创建一个本地 CIM 会话并命名为 localsession
New - CimSession -ComputerName localhost -Name localsession
# 获取会话详细信息
Get - CimSession -Name localsession
# 移除会话
Remove - CimSession -Name localsession
3. 更改 WMI 对象的属性
我们可以使用 CIM cmdlet 来操作 WMI 存储库中的对象,例如更改其属性或使用其方法。以下是更改属性的示例:
# 获取本地 HP 打印机的信息
Get - CimInstance Win32_Printer | Where - Object {$_.Name -like 'HP*'} | gm
# 创建一个变量并存储 HP 打印机对象
$printer = Get - CimInstance Win32_Printer | Where - Object {$_.Name -like 'HP*'}
# 检查变量内容
$printer
# 检查 Comment 属性的当前值
$printer.Comment
# 更改 Comment 属性的值
$printer.Comment = "I Love PowerShell"
# 将更改写回到 WMI 存储库
Set - CimInstance -InputObject $printer
需要注意的是,打印机对象的大多数属性是不可写的,例如 Default 属性不能使用 Set - CimInstance 设置。
4. 发现和调用 WMI 对象的方法
要了解对象的可用方法,可使用以下命令:
Get - CimClass -Class Win32_Printer | Select - Object -ExpandProperty CimClassMethods
由于 WMI 不是 PowerShell 的一部分,PowerShell 文档可能无法提供帮助,通常需要从 Microsoft 网站获取信息:https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/cimwin32 - wmi - providers
以下是调用 Win32_Process 类的 Create 方法启动 Notepad 程序的示例:
Invoke - CimMethod -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine = 'notepad.exe'}
返回值为 0 表示成功,同时会返回新创建的 Notepad 进程的 ProcessId 。该命令可能会在后台创建进程,不会立即看到 Notepad 窗口,但会在任务栏中看到。
5. 在 Linux 和 macOS 上使用 PowerShell
Linux 是服务器最常用的操作系统,但有多种不同的发行版。接下来将介绍如何在 Ubuntu 和 CentOS 等常见 Linux 发行版以及 macOS 上使用 PowerShell。
5.1 访问 Linux 机器
首先需要获取对 Linux 机器的访问权限,以便进行练习。
5.2 安装 PowerShell 7
可以使用包管理器或直接下载的方式在 Linux 上安装 PowerShell 7。
5.3 安装 VS Code
安装 VS Code 并在 CentOS 7 上进行设置。
5.4 在 Linux 上运行 PowerShell
在 Linux 上运行 PowerShell 与在 Windows 上有一些主要区别,常见的使用方式是通过 Secure Shell (SSH) 协议进行远程会话。
5.5 在 macOS 上安装 PowerShell 和 VS Code
可以使用免费的开源包管理器 Homebrew 轻松安装 PowerShell 和 VS Code。
总之,PowerShell 7 在不同的操作系统环境中都有其独特的应用方式,通过合理使用 CIM 和 WMI 以及掌握不同系统的安装和使用方法,可以更高效地进行系统管理和自动化操作。
使用 PowerShell 7 管理 Windows、Linux 和 macOS 系统
6. 在 Linux 上安装 PowerShell 7 的具体步骤
6.1 使用包管理器安装(以 Ubuntu 为例)
- 添加 Microsoft 包存储库 :
wget -q https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
- 更新包索引 :
sudo apt-get update
- 安装 PowerShell :
sudo apt-get install -y powershell
6.2 使用包管理器安装(以 CentOS 为例)
- 添加 Microsoft 包存储库 :
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/microsoft.repo'
- 安装 PowerShell :
sudo yum install -y powershell
6.3 直接下载安装
可以从 PowerShell 官方 GitHub 发布页面 下载适用于 Linux 的二进制包,然后进行手动安装。以 .tar.gz 包为例:
- 下载包 :
wget https://github.com/PowerShell/PowerShell/releases/download/v7.3.6/powershell-7.3.6-linux-x64.tar.gz
- 创建安装目录 :
mkdir ~/powershell
- 解压包到安装目录 :
tar -zxf powershell-7.3.6-linux-x64.tar.gz -C ~/powershell
- 添加可执行权限 :
chmod +x ~/powershell/pwsh
- 创建符号链接(可选) :
sudo ln -s ~/powershell/pwsh /usr/bin/pwsh
7. 在 CentOS 7 上安装和设置 VS Code
7.1 安装 VS Code
- 添加 Microsoft 包存储库 :
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
- 安装 VS Code :
sudo yum install -y code
7.2 设置 VS Code
- 打开 VS Code :在终端中输入
code启动 VS Code。 - 安装 PowerShell 扩展 :打开 VS Code 后,点击扩展图标(左侧边栏第五个图标),在搜索框中输入
PowerShell,选择PowerShell扩展并点击安装。
8. 在 Linux 上运行 PowerShell 的差异和远程会话
8.1 主要差异
- 文件路径 :Linux 使用
/作为路径分隔符,而 Windows 使用\。 - 环境变量 :Linux 环境变量的设置和使用方式与 Windows 不同。
- 命令兼容性 :一些 Windows 上的 PowerShell 命令在 Linux 上可能不可用或有不同的行为。
8.2 通过 SSH 进行远程会话
- 确保 SSH 服务已启动 :在 Linux 服务器上,使用以下命令启动 SSH 服务:
sudo systemctl start sshd
sudo systemctl enable sshd
- 从本地计算机连接到远程 Linux 服务器 :
ssh username@server_ip
- 在 SSH 会话中启动 PowerShell :
pwsh
9. 在 macOS 上安装 PowerShell 和 VS Code
9.1 安装 Homebrew
如果尚未安装 Homebrew,可以使用以下命令进行安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
9.2 安装 PowerShell
brew install --cask powershell
9.3 安装 VS Code
brew install --cask visual-studio-code
10. 总结与对比
| 操作系统 | PowerShell 安装方式 | 常用工具安装方式 | 运行特点 |
|---|---|---|---|
| Windows | 可通过官方安装包、PowerShell Gallery 等方式安装 | 可使用 Windows 自带的应用商店、安装包等方式安装 | 与 Windows 系统紧密集成,部分模块仅适用于 Windows |
| Linux(Ubuntu、CentOS) | 可使用包管理器(如 apt、yum)或直接下载安装 | 可使用包管理器安装常用工具,如 VS Code | 文件路径、环境变量等与 Windows 不同,部分命令兼容性有差异 |
| macOS | 使用 Homebrew 包管理器安装 | 使用 Homebrew 安装常用工具,如 VS Code | 基于 Unix 内核,与 Linux 有一些相似之处,但也有自身特点 |
通过以上对不同操作系统上 PowerShell 的使用介绍,我们可以看到 PowerShell 7 在跨平台管理方面的强大能力。无论是 Windows 系统的 CIM 和 WMI 操作,还是 Linux 和 macOS 上的安装与使用,都为系统管理员和开发者提供了统一的自动化和管理解决方案。
mermaid 流程图:
graph LR
A[选择操作系统] --> B{Windows}
A --> C{Linux}
A --> D{macOS}
B --> E[使用 CIM 和 WMI 管理]
C --> F[安装 PowerShell 7(包管理器或直接下载)]
C --> G[安装 VS Code]
C --> H[通过 SSH 远程会话]
D --> I[使用 Homebrew 安装 PowerShell 和 VS Code]
通过合理利用 PowerShell 7 在不同操作系统上的特性,我们可以更高效地完成系统管理和自动化任务,提高工作效率和系统的稳定性。
超级会员免费看

1358

被折叠的 条评论
为什么被折叠?



