PowerShell 7 在 Linux 和 macOS 上的使用指南
1. 技术环境准备
若没有运行 Linux 的客户端,就需要准备一个 Linux 设备。获取 Linux 设备有简单和稍难两种方式。这里介绍在 Windows 上安装 Ubuntu 服务器(无图形界面)和在 Oracle VirtualBox 中安装 CentOS 桌面客户端的方法。
1.1 安装 Ubuntu 服务器
- 确保 Windows 子系统 for Linux(WSL)已启用:
- 打开“控制面板” -> “程序和功能” -> “启用或关闭 Windows 功能”,勾选“适用于 Linux 的 Windows 子系统”。
- 重启后,打开 Microsoft Store(https://apps.microsoft.com),搜索并选择最新版本的 Ubuntu(如 22.04),点击“安装”,再点击“获取”,下载完成后点击“打开”。
- 在终端窗口中,等待安装完成,之后按提示创建用户名和输入两次密码,至此 Ubuntu 环境准备好安装 PowerShell。
注意,这些说明适用于 Windows 10 Pro 版本 19045,不同平台(如 Windows 11 或 Windows Server)安装 WSL 的步骤可能不同,且还有 WSL2 版本适用于较新的操作系统。
1.2 安装 CentOS 客户端
在 Oracle VirtualBox 中安装 CentOS,安装 VirtualBox 的说明可参考:https://www.virtualbox.org/manual/UserManual.html#installation。
安装好 VirtualBox 后,从 http://isoredirect.centos.org/centos/7/isos 下载 CentOS 镜像,并按照 https://www.linuxfordevices.com/tutorials/centos/centos-on-virtualbox 的说明创建虚拟机进行安装。这里安装了带有 GNOME 桌面 GUI 的 CentOS 7,以便在旧操作系统上安装 PowerShell。
若要进行 macOS 相关操作,还需要一台 Mac 设备。
2. 安装 PowerShell 7
安装 PowerShell 7 相对简单,但要确保 PowerShell 和 Linux 版本在支持矩阵内,否则可能出现意外结果。Microsoft 仅支持 RHEL、Ubuntu、Alpine 和 Debian 等少数 Linux 版本。
2.1 在 Ubuntu 22.04 上安装 PowerShell 7.4
在 Ubuntu 22.04 上安装 PowerShell 7.4,可按以下步骤操作:
1. 更新本地软件包:
sudo apt-get update
- 安装先决条件包:
sudo apt-get install -y wget apt-transport-https software-properties-common
- 获取操作系统版本:
source /etc/os-release
- 下载正确的存储库包:
wget -q https://packages.microsoft.com/config/ubuntu/$VERSION_ID/packages-microsoft-prod.deb
- 注册存储库:
sudo dpkg -i packages-microsoft-prod.deb
- 删除密钥文件:
rm packages-microsoft-prod.deb
- 再次更新软件包列表:
sudo apt-get update
- 安装 PowerShell:
sudo apt-get install -y powershell
启动 PowerShell 只需输入
pwsh
,输入
exit
可关闭,若想让 PowerShell 在后台运行,可输入
bash
切换到 Bash 提示符。在 Linux 上,PowerShell 大小写不敏感,如
get-process
和
Get-Process
效果相同,且支持 tab 补全。
2.2 在 CentOS 上安装 PowerShell
-
CentOS 8 和 9
:安装最新版本的 PowerShell 与 Ubuntu 类似,但使用
yum(RHEL 8)或dnf(RHEL 9)包管理器。操作步骤如下:
1. 使用curl下载存储库包:
curl -ssl -O https://packages.microsoft.com/config/rhel/8/packages-microsoft-prod.rpm
- 注册存储库:
sudo rpm -i packages-microsoft-prod.rpm
- 删除密钥文件:
rm packages-microsoft-prod.rpm
- 更新软件包列表:
sudo dnf update
- 安装 PowerShell:
sudo dnf install powershell -y
若安装失败,可能是代理设置问题,
yum
的代理设置在
/etc/yum.conf
,
dnf
的代理设置在
/etc/dnf/dnf.conf
。
- CentOS 7 :由于 CentOS 7 与较新版本的 PowerShell 依赖的 Linux 库不兼容,最后一个稳定版本是 7.2。可通过直接下载安装:
sudo yum install https://github.com/PowerShell/PowerShell/releases/download/v7.2.17/powershell-7.2.17-1.rh.x86_64.rpm
3. 安装 VS Code
在 Linux 上安装 VS Code 很简单。
3.1 使用 snapd 安装(适用于 Ubuntu 及部分 RHEL 和 CentOS 机器)
- 在较新的 Ubuntu 机器上,可直接使用以下命令安装:
sudo snap install --classic code
-
在 RHEL 和 CentOS 机器上,可能需要先启用 snapd:
1. 安装 snapd 包:
sudo yum install snapd
对于 CentOS 7,还需运行:
sudo yum install epel-release
- 启用 snap 使用的网络套接字:
sudo systemctl enable --now snapd.socket
- 创建符号链接:
sudo ln -s /var/lib/snapd/snap /snap
- 注销并重新登录或重启机器,然后使用 snap 安装 VS Code。
使用 snap 的好处是能在后台自动更新 VS Code。
3.2 手动安装(适用于 CentOS 7)
- 注册 Microsoft GPG 加密密钥:
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
-
创建并编辑
vscode.repo文件:
sudo nano /etc/yum.repos.d/vscode.repo
在文件中添加以下内容并保存:
[code]
name=Visual Studio Code
baseurl=https://packages.microsoft.com/yumrepos/vscode
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc
- 安装 VS Code:
sudo yum install code
在终端输入
code
即可启动 VS Code,其在 Linux 上的使用方式与 Windows 相同。
4. 在 Linux 上运行 PowerShell
PowerShell 在 Linux 上的工作方式与 Windows 基本相同,但由于底层操作系统不同,有以下几点需要注意:
4.1 大小写敏感性
在 Linux 上,虽然 PowerShell 本身大小写不敏感,但文件路径和文件名的大小写很重要。例如,若文件名为
MyFile.txt
,
get-content ./myfile.txt
可能无法找到文件。可尽量使用 tab 补全来避免这个问题。
4.2 文件系统差异
Linux 不使用字母区分驱动器,使用正斜杠
/
作为路径分隔符,PowerShell 能识别
/
和
\
作为文件路径分隔符,这使得编写跨平台脚本更方便。
4.3 别名差异
PowerShell 7 在 Linux 上不再包含常见的别名(如
ls
),而是直接调用 Bash 命令。其他不再使用别名的 Linux 命令包括
cp
、
mv
、
rm
、
cat
、
man
、
mount
和
ps
。
4.4 以管理员身份运行
在 Linux 上,不能像在 Windows 上那样在 PowerShell 中使用
sudo
前缀运行命令,而是需要使用
sudo pwsh
启动 PowerShell 以获取 root 权限。
4.5 跨平台脚本编写
可通过测试自动变量
$IsWindows
、
$IsLinux
和
$IsMacOS
来判断脚本运行的平台,并根据不同环境编写
if
语句改变脚本行为。
5. 编写跨平台脚本示例
编写一个跨平台脚本,在 Windows 和 Linux 上运行,返回当前 CPU 使用率最高的五个进程,并按降序输出到一个包含计算机名的文本文件中。
在 Windows 上,可使用
$env:computername
获取计算机名;在 Linux 上,可使用
hostname
命令。
6. 使用 OpenSSH 进行远程操作
Linux 不支持 Windows 远程管理(WinRM)协议,因此需使用 SSH 进行远程管理。OpenSSH 是开源的 SSH 工具集,自 2018 年起可用于 Windows,方便管理异构环境。
6.1 检查 PowerShell 是否支持 OpenSSH
使用以下命令检查 PowerShell 7 是否支持 OpenSSH:
(Get-Command New-PSSession).ParameterSets.Name
若看到
SSHHost
和
SSHHostHashParam
参数集,则表示支持;否则,需从 GitHub 下载最新版本的 PowerShell 7。
6.2 在 Windows 上安装 OpenSSH
若要远程连接到 Windows 机器,则需要安装 OpenSSH 服务器;若从 Windows 机器远程连接到其他机器,则无需安装,PowerShell 已有可用的 SSH 客户端。
安装 OpenSSH 服务器的步骤如下:
1. 检查 Windows 版本和权限:
(New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
Winver.exe
确保 Windows 版本不低于 10 1809 且具有管理员权限。
2. 安装 OpenSSH:
Get-WindowsCapability -Online | Where-Object {$_.Name -like 'OpenSSH*'} | Add-WindowsCapability -Online
-
启动并设置
sshd服务自动启动:
Start-Service sshd
Set-Service sshd -StartupType Automatic
-
配置
sshd以允许 PowerShell 使用:
以管理员身份打开记事本,打开C:\ProgramData\ssh\sshd_config文件,在文件最后一条记录之前添加以下内容并保存:
PasswordAuthentication yes
PubkeyAuthentication yes
Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -nologo
若使用 PowerShell 7.4 或更高版本,
-nologo
参数可省略。注意不要将文件保存为
sshd_config.txt
。
通过以上步骤,可在 Linux 和 macOS 上顺利安装和使用 PowerShell 7,进行本地和远程操作,并编写跨平台脚本。
PowerShell 7 在 Linux 和 macOS 上的使用指南
7. 跨平台脚本编写示例代码实现
为了实现前面提到的跨平台脚本,以下是具体的代码示例:
# 检查操作系统平台
if ($IsWindows) {
$computerName = $env:computername
$processes = Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
} elseif ($IsLinux) {
$computerName = hostname
$processes = ps -eo %cpu,comm | sort -k 1 -nr | head -n 5
}
# 构建输出文件名
$outputFileName = "$computerName-processes.txt"
# 输出结果到文件
if ($IsWindows) {
$processes | Out-File -FilePath $outputFileName
} elseif ($IsLinux) {
$processes | tee $outputFileName
}
上述脚本首先通过
$IsWindows
和
$IsLinux
自动变量判断当前操作系统,然后根据不同的系统获取计算机名和 CPU 使用率最高的五个进程,最后将结果输出到以计算机名命名的文本文件中。
8. 跨平台脚本编写注意事项表格
| 注意事项 | 详情 |
|---|---|
| 变量使用 |
不同操作系统的环境变量获取方式不同,如 Windows 用
$env:变量名
,Linux 部分可通过命令获取
|
| 命令差异 |
不同操作系统的命令存在差异,如获取进程信息,Windows 用
Get-Process
,Linux 用
ps
命令
|
| 文件路径分隔符 |
虽然 PowerShell 能识别
/
和
\
,但在不同系统中推荐使用各自的标准分隔符
|
9. OpenSSH 远程操作流程图
graph LR
A[检查 PowerShell 是否支持 OpenSSH] --> B{支持?}
B -- 是 --> C[根据需求决定是否在 Windows 安装 OpenSSH 服务器]
B -- 否 --> D[从 GitHub 下载最新版本 PowerShell 7]
D --> C
C -- 是 --> E[检查 Windows 版本和权限]
C -- 否 --> F[使用 PowerShell 已有 SSH 客户端远程连接]
E --> G{满足条件?}
G -- 是 --> H[安装 OpenSSH]
G -- 否 --> I[解决版本或权限问题]
I --> E
H --> J[启动并设置 sshd 服务自动启动]
J --> K[配置 sshd 以允许 PowerShell 使用]
K --> F
10. OpenSSH 远程操作的常见问题及解决方法列表
-
连接失败
:
-
检查目标机器的 SSH 服务是否正常运行,可在目标机器上使用
systemctl status sshd查看状态。 - 检查防火墙设置,确保 SSH 端口(默认 22)开放。
-
检查目标机器的 SSH 服务是否正常运行,可在目标机器上使用
-
权限问题
:
- 确保在 Windows 上以管理员权限执行相关操作。
-
在 Linux 上,确保使用
sudo启动 PowerShell 以获取足够权限。
-
代理问题
:
-
若存在代理,检查 CentOS 中
yum(/etc/yum.conf)和dnf(/etc/dnf/dnf.conf)的代理设置。
-
若存在代理,检查 CentOS 中
11. 总结
通过前面的介绍,我们详细了解了在 Linux 和 macOS 上安装 PowerShell 7、VS Code 的方法,掌握了在 Linux 上运行 PowerShell 的注意事项,学会了编写跨平台脚本以及使用 OpenSSH 进行远程操作。这些知识和技能能够帮助我们更好地利用 PowerShell 的强大功能,实现跨平台的自动化任务和脚本编写,提高工作效率和系统管理的便捷性。无论是在开发、测试还是生产环境中,都能发挥重要作用。希望大家在实际应用中不断实践和探索,进一步挖掘 PowerShell 的潜力。
超级会员免费看
1591

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



